Mengapakah batal dan {} tidak boleh disimpulkan sebagai tidak pernah menaip dalam TypeScript?
P粉548512637
2023-09-04 16:03:52
<p>Saya mendapat hasil yang berbeza apabila saya menggunakan jenis void TypeScript dengan jenis silang dengan jenis lain. </p>
<pre class="brush:php;toolbar:false;">type A = void {} // A adalah batal &
jenis B = void & '1' // B tidak pernah
jenis C = void & 1 // C tidak pernah
jenis D = void & rentetan // D tidak pernah
jenis E = void & String // E adalah void &
<pre class="brush:php;toolbar:false;">type A = void &
jenis E = void & String</pre>
<p>Mereka juga sepatutnya jenis tidak pernah, bukan? </p>
{}
和String
都是对象类型,而string
和'1'
都是原始类型。你可以将void
Bersilang jenis objek kerana jenis objek bersilang dengan menambah sifat:Sebaliknya, jenis primitif bersilang dengan mengurangkan set nilai yang mungkin:
Dan dengan memotong jenis primitif dengan jenis objek, anda boleh menambah sifat baharu pada jenis primitif:
Tetapi jenis primitif tidak boleh menjadi jenis primitif yang lain. Oleh itu, bersilang dua jenis primitif yang berbeza akan menghasilkan
never
Akhir sekali,
void
ialah jenis primitif.Jadi, ini bermakna
void & { foo: number }
bermaksud jenis primitifvoid & { foo: number }
意味着原始类型void
也将具有属性foo
juga akan mempunyai atributfoo
.Walau bagaimanapun,
void & string
akan menghasilkanvoid & string
将产生never
kerana ia adalah dua jenis primitif yang berbeza.Walau bagaimanapun,
void & String
ialahvoid & String
是void
加上String
的属性,因为String
是一个对象类型(通过new String()
ditambah dengan sifatString
keranaString
ialah jenis objek (melaluinew String() dicipta).
Namun, semua ini tidak masuk akal. Anda tidak boleh menetapkan
void
分配除了undefined
之外的任何东西,而undefined
不能有属性。所以我认为在你的代码库中void & Type
apa-apa selain daripadaundefined
danundefined
tidak boleh mempunyai atribut. Jadi saya rasavoid & 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.