Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
3.2k views
in Technique[技术] by (71.8m points)

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

image.png
第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 类型呢?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

并不会啊 这时候推断出的T不是 Array<string | number>吗


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...