generics - TypeScript-typargument i JSX-noder


Finns det något sätt att specificera typargument för komponenter som renderas i JSX?

Till exempel, överväg denna komponent:

interface SelectorProps<T> {
    selection: T;
    options: T[];
}

class Selector<T> extends React.Component<SelectorProps<T>, {}> {
    // ...
}

Om jag försöker rendera denna komponent i JSX:

<Selector selection="a" options={["a", "b", "c"]} />

Jag får dessa fel:

TS2322: Typen 'string' kan inte tilldelas typen 'T'.

TS2322: Typen 'string[]' kan inte tilldelas typen 'T[]'. Typen 'string' kan inte tilldelas typen 'T'.

Jag skulle förvänta mig att T härleds som string eller annars något sätt att specificera T=string i <Selector>. Finns det en lösning?

Den enda lösningen jag har hittat är att utöka komponenten för att eliminera alla typargument:

class StringSelector extends Selector<string> { }

Svar #1

Generiska JSX-element som beskrivs i https://github.com/Microsoft/TypeScript/issues/6395 stöds nu - sedan TypeScript 2.9.

Du bör nu kunna använda:

 <Selector<string> selection="a" options={["a", "b", "c"]} />

Se även: http://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-9.html

Relaterade artiklar