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 的约束,因此在这种情况下,您的代码在功能上是等效的。

采用此解决方案,您可以将原始示例中的每个箭头函数应用到。