検索

ホームページ  >  に質問  >  本文

TypeScript では void と {} を決して入力しないと推論できないのはなぜですか?

<p>TypeScript の void 型とクロス型を使用する他の型を使用すると、異なる結果が得られます。 </p> <pre class="brush:php;toolbar:false;">type A = void & {} // A は void & {} type B = void & '1' // B は決してありません type C = void & 1 // C は決して存在しません type D = void & string // D は決して存在しません type E = void & String // E は void & String</pre> <pre class="brush:php;toolbar:false;">type A = void & {} type E = void & String</pre> <p>それらは決して型ではないはずですよね? </p>
P粉548512637P粉548512637454日前644

全員に返信(1)返信します

  • P粉285587590

    P粉2855875902023-09-05 12:01:48

    {}String は両方ともオブジェクト型ですが、string'1' はどちらもプリミティブ型です。オブジェクト タイプはプロパティを追加することで交差するため、void とオブジェクト タイプを交差させることができます:

    リーリー

    対照的に、プリミティブ型は、可能な値のセットを減らすことによって交差します:

    リーリー

    そして、プリミティブ型とオブジェクト型を交差させることで、プリミティブ型に新しいプロパティを追加できます。

    リーリー

    しかし、プリミティブ型は別のプリミティブ型になることはできません。したがって、2 つの異なるプリミティブ型を交差させると、never

    になります。 リーリー

    最後に、void はプリミティブ型です。


    つまり、これは void & { foo:number } ということは、プリミティブ型 void には属性 foo も含まれることを意味します。

    ただし、void と string は 2 つの異なるプリミティブ型であるため、never を生成します。

    ただし、String はオブジェクト型 ( 経由) であるため、void と StringvoidString を加えたプロパティです。 new String() 作成)。


    しかし、これには何の意味もありません。 voidunknown 以外のものに割り当てることはできません。また、unknown はプロパティを持つことはできません。したがって、void & Type はコードベースに存在する理由がないと思います。それが必要だと思われる場合は、なぜそれが必要なのかを尋ね、コードが不要になるようにコードをリファクタリングしてみます。

    返事
    0
  • キャンセル返事