[解決済み] Typescript インターフェース内のすべてのプロパティをオプションにする
2022-04-28 15:58:18
質問
私のアプリケーションにインターフェイスがあります。
interface Asset {
id: string;
internal_id: string;
usage: number;
}
は、ポストインターフェイスの一部である。
interface Post {
asset: Asset;
}
また、アセットオブジェクトが部分的にしか構築されていないような、ポストドラフト用のインターフェイスも用意しました。
interface PostDraft {
asset: Asset;
}
を許可したい。
PostDraft
オブジェクトが部分的なアセットオブジェクトを持ちながら、そこにあるプロパティの型をチェックする(だから、単に
any
).
基本的には以下のように生成できる方法が欲しいです。
interface AssetDraft {
id?: string;
internal_id?: string;
usage?: number;
}
を完全に再定義することなく
Asset
インターフェイスを使用します。このような方法はあるのでしょうか?そうでない場合、この状況で私の型を配置するスマートな方法は何でしょうか?
どのように解決するのですか?
TypeScript 2.1では、オプションのプロパティを持つ追加のインターフェイスを作成しない限り、このようなことはできません。
これを実現するためには
Partial<T>
という型があり、TypeScriptがデフォルトで提供している。
interface PostDraft {
asset: Partial<Asset>;
}
これで
asset
はオプションであるため、以下のようなことが可能になります。
const postDraft: PostDraft = {
asset: {
id: "some-id"
}
};
について
Partial<T>
Partial<T>
は
定義済み
を、提供された型のすべてのプロパティをオプションにするマッピングされた型として使用します(
?
というトークンを使用します。)
type Partial<T> = {
[P in keyof T]?: T[P];
};
マッピングされた型についてもっと読む ここで と ハンドブックに .
ディープパーシャル
オブジェクトに対して再帰的に動作する部分的な実装が必要な場合、TS 4.1+では以下の型を使用することができます。
type DeepPartial<T> = {
[P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];
};
関連
-
[解決済み] TSLintの "文字列リテラルによるオブジェクトアクセス "を回避するためのコードの書き換え方法
-
[解決済み] なぜTypescriptではinferキーワードが必要なのでしょうか?
-
[解決済み] Typescriptでオブジェクトのプロパティを結合する方法は?
-
[解決済み] TypeScriptでオブジェクトに動的にプロパティを割り当てるには?
-
[解決済み] TypeScriptで文字列をenumに変換するには?
-
[解決済み] Typescript によるインターフェース型チェック
-
[解決済み] TypeScriptでインターフェースファイルの定義に基づいたオブジェクトを作成するには?
-
[解決済み】TypeScriptのインターフェースと型について
-
[解決済み】TypeScriptのインターフェイスプロパティの型を "抽出 "する方法はあるのか?
-
[解決済み] 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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ts1206 デコレーターはここでは無効です、Angular 2。
-
[解決済み] Apollo Serverでコンテキストオブジェクトを正しく入力するにはどうすればよいですか?
-
[解決済み] サービスにDocumentを挿入する方法は?
-
[解決済み] tsc がプロジェクトのコンパイルに成功すると、ts-node は d.ts ファイルを無視します。
-
[解決済み] TypeScriptのsetTimeoutはどのような戻り値型を使用すればよいですか?
-
[解決済み] オブジェクトの型は「不明」です typescript generics
-
[解決済み] 'タイプ 'never'にプロパティが存在しません。
-
[解決済み] モジュール 'module-name' の宣言ファイルが見つかりませんでした。'/path/to/module-name.js' は暗黙のうちに 'any' 型を持っています。
-
[解決済み] タイプスクリプトのレコードタイプとは何ですか?
-
[解決済み】Visual Studio Codeで.js.mapファイルを非表示にする方法