recherche

Maison  >  Questions et réponses  >  le corps du texte

Pourquoi void et {} ne peuvent-ils pas être déduits comme ne jamais taper en TypeScript ?

<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粉548512637P粉548512637456 Il y a quelques jours648

répondre à tous(1)je répondrai

  • P粉285587590

    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 & Stringvoid 加上 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.

    répondre
    0
  • Annulerrépondre