いくつかのオプションフィールドとそのタイプの変数を持つ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
ケースを処理するためにオプションチェーンを使用できますか?そうでなければ、最も簡潔/慣用の回避策は何ですか?見る 遊び場リンク 。
短絡評価 を使用して、フォールバック値(空オブジェクト)を取得する_f?.config
_式がundefined
に評価された場合:
_const { longFieldName } = f?.config || {};
_