42

Typescript 引入了对 JSX 语法的支持。所以我有一个表达式,它适用于传统的 *.ts 文件,但不适用于 *.tsx 文件:

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

我想知道有没有办法让它在 *.tsx 文件中工作?

4

2 回答 2

60

要让它理解它是一个类型参数而不是 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 };
};
于 2015-09-21T14:26:12.140 回答
46

这是解析歧义问题的结果。使这一点明确的一件事是在T1.

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

T1像隐式这样的类型参数unknown无论如何都有一个约束,所以在这种情况下,您的代码在功能上是等效的。

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

于 2016-06-07T19:33:27.590 回答