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