为什么TypeScript会接受以下代码:
export let repeat = <a> (a: a, n: number): Array<a> => {
return [...Array(n).fill(a), 1] // <-- no error here (but should)
// return [...[a], 1] // <-- an error here (as should)
}
console.log(repeat("x", 4))tsconfig.json
"strict": true,
...添加, 1]以检查案例。它并不是repeat逻辑的一部分。
发布于 2019-07-02 19:12:20
问题是你在使用Array(n)的时候引入了一个any[]。Array(n)将返回一个any[],因此无论您在数组中放入了什么,数组扩展的结果也将是一个any[]。根据定义,any可以赋值给任何对象,包括泛型类型参数,因此赋值成功。
使用泛型构造函数,您将得到预期的错误:
export let repeat = <a> (a: a, n: number): Array<a> => {
return [...new Array<a>(n).fill(a), 1] // <-- error now
}您还可以考虑启用tslint规则no-unsafe-any,它可能会捕捉到这一点。
https://stackoverflow.com/questions/56851105
复制相似问题