泛型数组的类型推断为什么不起作用?
第7行写了个泛型T,限定数组元素的类型必须统一。第11行传递的数组元素类型分别是数字、字符串,类型并不统一,按理说 typescript 应该会报错的,这里为什么不报错呢?
function add<T>(a: T, b: T) {return `${a} ${b}`;
}
console.log(add(888, 'y')); //类型推断的结果会指出代码哪儿有错
function join<T>(arr: T[]) {
return arr.join(' ');
}
console.log(join([1, 'y'])); //类型推断的结果认为代码写的没问题
回答
并不会啊 这时候推断出的T不是 Array<string | number>吗
第7行function join<T>(arr: T[])
目的是限定数组里面所有元素的类型必须统一。要么全部是数字,要么全部是字符串,要么全是布尔型……但是不能出现混合类型的数组。第11行传递的参数就是一个混合类型的数组,字符串、数字同时出现了。期望这种调用方式会报错的,但是typescript并没报错。
非得使用console.log(join<string>([888, 'y']))
这样笨拙的写法才会报错。可是这么调用函数是不切实际的。试想:join()已经不报错了,谁又会多此一举的采用join<string>()呢?
以上是 泛型数组的类型推断为什么不起作用? 的全部内容, 来源链接: utcz.com/a/66073.html