[解決済み】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()
関連
-
[解決済み】Typescriptで、! (エクスクラメーションマーク/バン)演算子でメンバを再参照するのは?
-
[解決済み] error TS2339: Property 'x' does not exist on type 'Y'.
-
[解決済み] TypeScriptでfetchを使う方法
-
[解決済み] TypeScriptで文字列を数値に変換する方法とは?
-
[解決済み] TypeScript で `window` に新しいプロパティを明示的に設定するにはどうすればよいですか?
-
[解決済み] TypeScriptでの取得と設定
-
[解決済み] TypeScriptでパラメータとして強く型付けされた関数は可能か?
-
[解決済み] Typescript によるインターフェース型チェック
-
[解決済み] noImplicitAnyフラグを有効にしてtypescriptをコンパイルすると、"Index signature of object type implicitly has an 'any' type "というエラーが発生しますが、どうすれば防ぐことができますか?
-
[解決済み】TypeScriptのインターフェースと型について
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】tsconfigファイルにおけるesModuleInteropの理解
-
[解決済み] タイプスクリプトのエラーです。TS7053 要素が暗黙のうちに 'any' 型を持っています。
-
[解決済み] error TS2339: Property 'x' does not exist on type 'Y'.
-
[解決済み] グローバル定数の定義
-
[解決済み] TSがモジュールを見つけ出せない
-
[解決済み] オブジェクトの配列に対してインターフェースを定義するには?
-
[解決済み] TypeScriptでオブジェクトに動的にプロパティを割り当てるには?
-
[解決済み] TypeScriptの "*.d.ts "について
-
[解決済み] noImplicitAnyフラグを有効にしてtypescriptをコンパイルすると、"Index signature of object type implicitly has an 'any' type "というエラーが発生しますが、どうすれば防ぐことができますか?
-
[解決済み] TypeScriptのクラス型チェック