为何TypeScript不对含不同类型元素的泛型数组参数报错?
为什么这段TypeScript代码未报错?
先看你的代码示例:
function print<G>(params: G[]): G { return params[0]; } console.log(print(["1",false,"2",5]))
原因在于TypeScript的类型推断与联合类型机制:
- 当传入包含字符串、布尔值、数字的混合数组时,TypeScript会自动将数组元素类型推断为这些类型的联合类型——
string | boolean | number。 - 泛型
G会被推导为这个联合类型,此时函数参数params的类型是(string | boolean | number)[],返回值类型是string | boolean | number。 - 返回的
params[0]是字符串"1",属于上述联合类型的一员,完全符合返回值的类型要求,因此TypeScript不会报错。
如果想要让TypeScript对混合类型数组报错,可以显式指定泛型类型,比如强制G为string:
console.log(print<string>(["1",false,"2",5])) // 此时会报错,因为false和5不属于string类型
内容的提问来源于stack exchange,提问作者user20123663
相关产品推荐
相关产品推荐

