【发布时间】:2021-01-10 14:30:53
【问题描述】:
我们来the following code in TypeScript:
function f<T>(a: T, b: T) { }
f("a", 1);
TypeScript 预计会失败:
“数字”类型的参数不能分配给“字符串”类型的参数。
但是,when I pass null (or undefined) instead of 1,TypeScript 将泛型参数 <T> 的类型更改为 string | null 并且不会失败。
我有两个问题:
- 为什么
null或undefined的处理方式不同于例如number? - 以及如何防止扩大(将类型更改为
string | null)?
【问题讨论】:
-
TypeScript 正在推断联合类型
string | null,因为a和b都是同样适用于T的推断站点。如果a的类型应该依赖于b的类型,那么你可以写function f<T, U extends T>(a: T, b: U) { }。我知道这不是你的问题。
标签: typescript typescript-generics