[英]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!"
直覺上,當與其他字符串文字類型放在聯合中時,感覺{}
的行為方式應與string
和any
相同。 也就是說,將聯合減少為“最寬”成員的類型。
為什么不是這樣呢?
原因是類型的用例也不同
雖然{}
表示任何非空值並且具有類型檢查any
(根據文檔)表示“任何你想要的”並且你必須使用它
每當您不希望特定值導致類型檢查錯誤時
因此,當在聯合類型中使用any
時,就像它“刪除”了類型檢查一樣
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.