web-dev-qa-db-ja.com

破壊割り当てとオプションの連鎖を組み合わせることができますか?

いくつかのオプションフィールドとそのタイプの変数を持つTypesScriptインタフェースがあります。

interface Foo {
    config?: {
        longFieldName?: string;
    }
}

declare let f: Foo;
 _

同じ名前の変数にlongFieldNameを置きたいのですが。

configがオプションではない場合は、 Destructing Assignment を使用します。longFieldNameを繰り返すことなくこれを行います。しかし、それはタイプエラーを受けます:

const { longFieldName } = f.config;
     // ~~~~~~~~~~~~~  Property 'longFieldName' does not exist on type '{ longFieldName?: string | undefined; } | undefined'.
 _

私は オプションチェーン を簡潔に扱うためにundefined caseを使用することができます。

const longFieldName = f?.config.longFieldName;  // OK, type is string | undefined
 _

しかし今、私はlongFieldNameを繰り返す必要があります。

私のケーキを食べて食べることができますか? undefined _の繰り返しを繰り返すことなく、longFieldNameケースを処理するためにオプションチェーンを使用できますか?そうでなければ、最も簡潔/慣用の回避策は何ですか?見る 遊び場リンク

13
danvk

短絡評価 を使用して、フォールバック値(空オブジェクト)を取得する_f?.config_式がundefinedに評価された場合:

_const { longFieldName } = f?.config || {};
_
2
Ori Drori