簡體   English   中英

打字稿泛型。 類型系統中斷的簡單案例

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM