2015-09-21 1 views
5

Typescript introduit la prise en charge de la syntaxe JSX. J'ai donc une expression qui fonctionne très bien avec les fichiers traditionnels * .ts mais pas avec les * .tsx:Typescript TSX et paramètres génériques

const f = <T1>(arg1: T1) => <T2>(arg2: T2) => { 
    return { arg1, arg2 }; 
} 

Je me demande est-il un moyen de le faire fonctionner dans un fichier * .tsx?

Répondre

5

Vous pouvez utiliser des expressions de fonction au lieu:

const f = function<T1>(arg1: T1) { 
    return function<T2>(arg2: T2) { 
     return { arg1, arg2 }; 
    }; 
}; 

Ou bien, je l'ai découvert cela fonctionne:

const f = <T1, T2>(arg1: T1) => (arg2: T2) => { 
    return { arg1, arg2 }; 
}; 

Sur sidenote, il semble qu'il compilera bien quand plusieurs paramètres génériques sont fournis, mais pas un. Par exemple, fournir un paramètre générique fictif rendra ce travail:

const f = <T1, Dummy>(arg1: T1) => { 
    return { arg1 }; 
}; 

Ce n'est certainement pas idéal. Il pourrait y avoir une autre façon de faire fonctionner cela avec un seul paramètre générique, mais je ne suis pas sûr.

4

Ceci est le résultat de problèmes d'ambiguïté d'analyse. Une chose qui rendrait ceci non ambigu est l'ajout d'une contrainte explicite sur T1.

const f = <T1 extends {}>(arg1: T1) => { 
    return { arg1 }; 
} 

Les paramètres de type comme T1 ont implicitement une contrainte de {} de toute façon, dans ce cas, votre code est fonctionnellement équivalent.

Prenez cette solution et vous pouvez appliquer sur chaque fonction de flèche de votre exemple original.