【发布时间】:2021-04-20 22:32:00
【问题描述】:
我有以下通用函数:
type Identity = <T extends string | number>(arg: T) => T;
const identity: Identity = (x) => x;
如果我尝试像这样使用此功能,我会收到无法重新分配的错误。
let a = identity('a');
a = 'b'; // Error: Type '"b"' is not assignable to type '"a"'
let b = identity(1);
b = 2; // Error: Type '2' is not assignable to type '1'
我希望从identity 返回的类型是string 或number,但似乎我得到了'a' 和1 的文字类型。为什么会这样?有没有办法改变我的约束,所以这就是行为?
我找到了一些解决方法。首先将参数分配给变量:
let a_param = 'a'
let a = identity(a_param);
a = 'b'; // Yay
let b_param = 1;
let b = identity(b_param);
b = 2; // Yay
其次要转换为string 或number:
let a = identity('a' as string);
a = 'b'; // Yay
let b = identity(1 as number);
b = 2; // Yay
这两种感觉都不对。我还在学习 TS,所以我觉得我错过了一些东西。
【问题讨论】:
标签: typescript typescript-generics