Rumah > Soal Jawab > teks badan
P粉2855875902023-09-05 12:01:48
{}
和 String
都是对象类型,而 string
和 '1'
都是原始类型。你可以将 void
Bersilang jenis objek kerana jenis objek bersilang dengan menambah sifat:
type A = { foo: number } & { bar: string } // { foo: number, bar: string }
Sebaliknya, jenis primitif bersilang dengan mengurangkan set nilai yang mungkin:
type B = string & 'abc' // 'abc'
Dan dengan memotong jenis primitif dengan jenis objek, anda boleh menambah sifat baharu pada jenis primitif:
type C = string & { foo: number } declare const c: C c.foo // number
Tetapi jenis primitif tidak boleh menjadi jenis primitif yang lain. Oleh itu, bersilang dua jenis primitif yang berbeza akan menghasilkan never
type D = string & number // never type E = 1 & 2 // never
Akhir sekali, void
ialah jenis primitif.
Jadi, ini bermakna void & { foo: number }
bermaksud jenis primitif void & { foo: number }
意味着原始类型 void
也将具有属性 foo
juga akan mempunyai atribut foo
.
Walau bagaimanapun, void & string
akan menghasilkan void & string
将产生 never
kerana ia adalah dua jenis primitif yang berbeza.
Walau bagaimanapun, void & String
ialah void & String
是 void
加上 String
的属性,因为 String
是一个对象类型(通过 new String()
ditambah dengan sifat String
kerana String
ialah jenis objek (melalui new String() < /code> dicipta).
Namun, semua ini tidak masuk akal. Anda tidak boleh menetapkan void
分配除了 undefined
之外的任何东西,而 undefined
不能有属性。所以我认为在你的代码库中 void & Type
apa-apa selain daripada undefined
dan undefined
tidak boleh mempunyai atribut. Jadi saya rasa void & Type
tidak mempunyai sebab untuk wujud dalam pangkalan kod anda. Jika anda fikir anda memerlukannya, saya akan bertanya kepada anda mengapa anda memerlukannya dan cuba memfaktorkan semula kod itu supaya ia tidak memerlukannya.