P粉2855875902023-09-05 12:01:48
{}
和 String
都是物件類型,而 string
和 '1'
都是原始型別。你可以將 void
與物件類型相交,因為物件類型透過新增屬性來相交:
type A = { foo: number } & { bar: string } // { foo: number, bar: string }
相反,原始類型透過減少可能的值集合來相交:
type B = string & 'abc' // 'abc'
而透過將原始類型與物件類型相交,你可以為原始類型新增屬性:
type C = string & { foo: number } declare const c: C c.foo // number
但是一個原始型別永遠不能成為另一個原始型別。因此,相交兩個不同的原始類型將導致 never
type D = string & number // never type E = 1 & 2 // never
最後,void
是一個原始型別。
所以,這表示 void & { foo: number }
意味著原始型別 void
也會有屬性 foo
。
然而,void & string
將產生 never
,因為它們是兩種不同的原始類型。
但是,void & String
是void
加上String
的屬性,因為String
是一個物件類型(透過new String()
建立)。
然而,這一切都沒有意義。你不能給 void
分配除了 undefined
之外的任何東西,而 undefined
不能有屬性。所以我認為在你的程式碼庫中 void & Type
沒有存在的理由。如果你認為你需要它,我會問你為什麼需要它,並嘗試重構程式碼以不需要它。