Typescript TSX 和通用参数
Typescript TSX and generic parameters
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
的约束,因此在这种情况下,您的代码在功能上是等效的。
采用此解决方案,您可以将原始示例中的每个箭头函数应用到。
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
的约束,因此在这种情况下,您的代码在功能上是等效的。
采用此解决方案,您可以将原始示例中的每个箭头函数应用到。