H5W3
当前位置:H5W3 > 问答 > 正文

泛型数组的类型推断为什么不起作用?

泛型数组的类型推断为什么不起作用?
第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>()呢?

未经允许不得转载:H5W3 » 泛型数组的类型推断为什么不起作用?

赞 (0)

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址