Mengapakah batal dan {} tidak boleh disimpulkan sebagai tidak pernah menaip dalam TypeScript?
P粉548512637
P粉548512637 2023-09-04 16:03:52
0
1
632
<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>
P粉548512637
P粉548512637

membalas semua(1)
P粉285587590

{}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 & Stringvoid 加上 String 的属性,因为 String 是一个对象类型(通过 new String() ditambah dengan sifat String kerana String ialah jenis objek (melalui new String() 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.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan