第7行写了个泛型T,限定数组元素的类型必须统一。第11行传递的数组元素类型分别是数字、字符串,类型并不统一,按理说 typescript 应该会报错的,这里为什么不报错呢?
//例1
function add<T>(a: T, b: T) {
return `${a} ${b}`;
}
console.log(add(888, 'y')); //类型推断的结果会指出代码哪儿有错
//例2
function join<T>(arr: T[]) {
return arr.join(' ');
}
console.log(join([1, 'y'])); //类型推断的结果认为代码写的没问题
typescript的类型推断,不应该包括联合类型的!如果依据第11行的[1, 'y']
就推导出第7行的 T 是 number|string,那修改第11行的数组,变成[1, 'y', {}, true, undefined]
势必推导出第7行的 T 是 number|string|object|boolean|undefined……继续下去不就成了 any 类型?
这种情况为什么不能象例1那样给出错误提示呢?例1为什么就不会推导成 any 类型呢?
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…