TypeScript では void と {} を決して入力しないと推論できないのはなぜですか?
P粉548512637
P粉548512637 2023-09-04 16:03:52
0
1
634
<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粉548512637
P粉548512637

全員に返信(1)
P粉285587590

{}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
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート