typescript - 相同的元組不相等?
有時在對 Tuples 的操作中,我們最終會把 [a: 1, b?: 2] 轉換成像 [a: 1, b?: 2 | undefined] 這樣的形式
雖然它不會改變任何東西,但讀起來很差,所以我最後使用了這種類型(給定 Cast,它在 playground 中,並且只是確保傳入的是 ReadonlyArray)
// Given UnNullify that transforms [a: 1, b?: 2 | undefined] -> [a: 1, b?: 2]
type UnNullify <Data extends ReadonlyArray <any>> = Cast <{
[K in keyof Data]: Exclude <Data [K], null | undefined>
}, ReadonlyArray <any>>
我不明白的是,雖然類型被正確計算出來,但它不再 Equals 原始類型(Equals 測試類型是否相等在 playground 中)
type T = UnNullify <[a: 1, b?: 2 | undefined]> // [a: 1, b?: 2]
type Test1 = Equals <T, [a: 1, b?: 2]> // false ?? - how come
type Test2 = Equals <[a: 1, b?: 2], [a: 1, b?: 2]> // true as expected
這有原因嗎?如何克服它?
連結到遊樂場
編輯錯誤請求的連結