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

İlgili makaleler