Typescript 引入了对 JSX 语法的支持。所以我有一个表达式,它适用于传统的 *.ts 文件,但不适用于 *.tsx 文件:
const f = <T1>(arg1: T1) => <T2>(arg2: T2) => {
return { arg1, arg2 };
}
我想知道有没有办法让它在 *.tsx 文件中工作?
Typescript 引入了对 JSX 语法的支持。所以我有一个表达式,它适用于传统的 *.ts 文件,但不适用于 *.tsx 文件:
const f = <T1>(arg1: T1) => <T2>(arg2: T2) => {
return { arg1, arg2 };
}
我想知道有没有办法让它在 *.tsx 文件中工作?
要让它理解它是一个类型参数而不是 JSX 元素,您可以在类型参数后添加一个逗号:
const f = <T1,>(arg1: T1) => <T2,>(arg2: T2) => {
return { arg1, arg2 };
};
或者您可以使用函数表达式:
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 };
};
这是解析歧义问题的结果。使这一点明确的一件事是在T1
.
const f = <T1 extends unknown>(arg1: T1) => {
return { arg1 };
}
T1
像隐式这样的类型参数unknown
无论如何都有一个约束,所以在这种情况下,您的代码在功能上是等效的。
采用此解决方案,您可以应用原始示例中的每个箭头函数。