簡體   English   中英

為什么不擴大文字類型和 {} 的聯合?

[英]Why aren't unions with literal types and {} widened?

在下面的示例中,為什么Test3沒有縮減為{} ,而其他的則縮減為聯合中最寬的成員?

type Test1 = "a" | "b" | string // => string
type Test2 = "a" | "b" | any // => any
type Test3 = "a" | "b" | {} // => "a" | "b" | {}

{} 表示任何非空值,這意味着這些都是完全有效的:

const test1: any = "hello, world!"
const test2: string = "hello, world!"
const test3: {} = "hello, world!"

直覺上,當與其他字符串文字類型放在聯合中時,感覺{}的行為方式應與stringany相同。 也就是說,將聯合減少為“最寬”成員的類型。

為什么不是這樣呢?

原因是類型的用例也不同

雖然{}表示任何非空值並且具有類型檢查any (根據文檔)表示“任何你想要的”並且你必須使用它

每當您不希望特定值導致類型檢查錯誤時

因此,當在聯合類型中使用any時,就像它“刪除”了類型檢查一樣

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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