Pourquoi void et {} ne peuvent-ils pas être déduits comme ne jamais taper en TypeScript ?
P粉548512637
P粉548512637 2023-09-04 16:03:52
0
1
635
<p>J'obtiens des résultats différents lorsque j'utilise le type void de TypeScript avec des types croisés avec d'autres types. </p> <pre class="brush:php;toolbar:false;">type A = void & {} // A est void & tapez B = void & '1' // B n'est jamais tapez C = void & 1 // C n'est jamais tapez D = void & string // D n'est jamais tapez E = void & String // E est void & <pre class="brush:php;toolbar:false;">type A = void & tapez E = vide & <p>Ils devraient également être du type «jamais», n'est-ce pas ? </p>
P粉548512637
P粉548512637

répondre à tous(1)
P粉285587590

{}String 都是对象类型,而 string'1' 都是原始类型。你可以将 void Intersecte les types d'objets car les types d'objets se croisent en ajoutant des propriétés :

type A = { foo: number } & { bar: string } // { foo: number, bar: string }

En revanche, les types primitifs se croisent en réduisant l'ensemble des valeurs possibles :

type B = string & 'abc' // 'abc'

Et en croisant un type primitif avec un type objet, vous pouvez ajouter de nouvelles propriétés au type primitif :

type C = string & { foo: number }
declare const c: C
c.foo // number

Mais un type primitif ne peut jamais être un autre type primitif. Par conséquent, l’intersection de deux types primitifs différents donnera never

type D = string & number // never
type E = 1 & 2 // never

Enfin, void est un type primitif.


Donc, cela signifie que void & { foo: number } signifie que le type primitif void & { foo: number } 意味着原始类型 void 也将具有属性 foo aura également l'attribut foo.

Cependant, void & string produira void & string 将产生 never car ce sont deux types primitifs différents.

Cependant, void & String est void & Stringvoid 加上 String 的属性,因为 String 是一个对象类型(通过 new String() plus les propriétés de String car String est un type d'objet (via new String() créé).


Cependant, rien de tout cela n’a beaucoup de sens. Vous ne pouvez pas attribuer void 分配除了 undefined 之外的任何东西,而 undefined 不能有属性。所以我认为在你的代码库中 void & Type autre chose que undéfini, et undéfini ne peut pas avoir d'attributs. Je pense donc que void & Type n'a aucune raison d'exister dans votre base de code. Si vous pensez en avoir besoin, je vous demanderais pourquoi vous en avez besoin et j'essaierais de refactoriser le code pour qu'il n'en ait pas besoin.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal