1. ホーム
  2. タイプスクリプト

[解決済み】Typescript インターフェースのデフォルト値

2022-04-28 17:03:23

質問

TypeScriptで以下のようなインターフェースを持っています。

interface IX {
    a: string,
    b: any,
    c: AnotherType
}

その型の変数を宣言し、すべてのプロパティを初期化します。

let x: IX = {
    a: 'abc',
    b: null,
    c: null
}

そして、後でinit関数でそれらに実際の値を割り当てます。

x.a = 'xyz'
x.b = 123
x.c = new AnotherType()

しかし、オブジェクトを宣言するときに、各プロパティにデフォルトのヌル値をたくさん指定しなければならないのは、後で本当の値を設定すればよいので嫌なものです。私が提供しないプロパティをデフォルトでnullにするようにインターフェイスに指示することができるでしょうか?何がそれをさせてくれるのでしょう。

let x: IX = {
    a: 'abc'
}

を実行しても、コンパイラーエラーが発生しません。今現在は、以下のように表示されます。

TS2322: 型 '{}' は型に割り当てられません。 'IX'です。 型'{}'にプロパティ'b'がありません。

どのように解決するのですか?

<ブロッククオート

提供しないプロパティをデフォルトでnullにするようにインターフェイスに指示することはできますか?何をすればいいのでしょうか?

を提供することはできません。 デフォルト値 インターフェースやタイプエイリアスはコンパイル時のみで、デフォルト値はランタイムサポートが必要だからです。

代替案

しかし、指定されない値は、デフォルトで undefined をJavaScriptのランタイムで使用することができます。そこで、それらをオプションとしてマークすることができます。

interface IX {
  a: string,
  b?: any,
  c?: AnotherType
}

そして、作成時に必要なのは a :

let x: IX = {
    a: 'abc'
};

必要に応じて値を指定してください。

x.a = 'xyz'
x.b = 123
x.c = new AnotherType()