TypeScriptでは、JSX構文のサポートが導入されています。したがって、従来の* .tsファイルでは非常にうまく機能する式がありますが、*。tsxファイルでは機能しません。
const f = <T1>(arg1: T1) => <T2>(arg2: T2) => {
return { arg1, arg2 };
}
* .tsxファイル内で機能させる方法はありますか?
代わりに関数式を使用できます。
const f = function<T1>(arg1: T1) {
return function<T2>(arg2: T2) {
return { arg1, arg2 };
};
};
または、代わりに、私はこれが機能することを発見しました:
const f = <T1, T2>(arg1: T1) => (arg2: T2) => {
return { arg1, arg2 };
};
ちなみに、複数の汎用パラメーターが提供されている場合は正常にコンパイルされるようですが、1つではありません。たとえば、ダミーのジェネリックパラメータを指定すると、次のように機能します。
const f = <T1, _>(arg1: T1) => {
return { arg1 };
};
// or just adding a comma
const g = <T1,>(arg1: T1) => {
return { arg1 };
};
しかし、それは絶対に理想的ではありません。 1つの汎用パラメーターだけでこれを機能させる別の方法があるかもしれませんが、よくわかりません。
これは、あいまいさの問題を解析した結果です。これを明確にする1つのことは、T1
に明示的な制約を追加することです。
const f = <T1 extends {}>(arg1: T1) => {
return { arg1 };
}
T1
のような型パラメーターには、とにかく暗黙的に{}
の制約があるため、この場合、コードは機能的に同等です。
このソリューションを使用すると、元の例の各矢印関数に適用できます。