[英]<Typescript> function parameter has generics. how to pass?
[英]Typescript generics. Easy case of a type system break
為什么下面的代碼被 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))
配置文件
"strict": true,
...
添加, 1]
以檢查大小寫。 它並不意味着成為repeat
邏輯的一部分。
問題是您在使用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
,這可能會發現這一點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.