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
