Maison > Questions et réponses > le corps du texte
P粉2855875902023-09-05 12:01:48
{}
和 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 & String
是 void
加上 String
的属性,因为 String
是一个对象类型(通过 new String()
plus les propriétés de String
car String
est un type d'objet (via new String() < /code> 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.