generikler - JSX düğümlerinde TypeScript tür argümanları
JSX'de render edilen bileşenler için tür argümanlarını belirtmenin bir yolu var mı?
Örneğin, bu bileşeni düşünün:
interface SelectorProps<T> {
selection: T;
options: T[];
}
class Selector<T> extends React.Component<SelectorProps<T>, {}> {
// ...
}
Eğer bu bileşeni JSX içinde render etmeye çalışırsam:
<Selector selection="a" options={["a", "b", "c"]} />
Bu hataları alıyorum:
TS2322: 'string' türü 'T' türüne atanamaz.
TS2322: 'string[]' türü 'T[]' türüne atanamaz. 'string' türü 'T' türüne atanamaz.
T'nin string olarak çıkarılacağını veya <Selector>'de T=string belirtmenin bir yolunu beklerdim. Bir çözüm var mı?
Bulduğum tek geçici çözüm, tüm tür argümanlarını ortadan kaldırmak için bileşeni genişletmek:
class StringSelector extends Selector<string> { }
Cevap #1
https://github.com/Microsoft/TypeScript/issues/6395 adresinde açıklanan genel JSX öğeleri artık desteklenmektedir - TypeScript 2.9'dan itibaren.
Artık şunu kullanabilmelisiniz:
<Selector<string> selection="a" options={["a", "b", "c"]} />
Ayrıca bakınız: http://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-9.html
