2
は、私は次のコードを持って言う:TypeScriptで2つの異なるオブジェクトタイプを区別するにはどうすればよいですか?
function myFunction(x: { foo: number } | { bar: string }) {
私はx
は、第1または第2のタイプであるかどうかを判断するためにいくつかのコードを書くことができますどのように?私はと考えられてきた
もの:
foo
プロパティをチェックするx is MyType
機能を書き込みます。はい、私はこれを行うことができますが、1つの関数の引数としてのみ使用される型の場合は過剰です。if ((x as { foo: number}).foo) { let y = x as { foo: number }
。私はこれを行うことができましたが、タイプシステムのポイントを打ち負かします。- 両者に共通の
type
プロパティを指定します。繰り返しますが、1つの関数の引数としてのみ使用される型の場合は、過剰なようです。
あなたはまた、元のパラメータの型が変更されていないことができますあなたは別の代入で互換性のある統一型を好きです: 'let tx:{foo ?: number、bar ?: string} = x; if(typeof tx.foo!== 'undefined'){...}です。また、union型が互いに素であることを暗示することは決してありません。xには 'foo'と' bar'の両方があります。あなたがそれを分離したい場合は、答えの正確な形式を使用する必要があります。 – artem
これは非常に賢いです。うまくいけばもっと良い解決策がいつか来るかもしれませんが、これは今のところ適当です。 – thedayturns