[解決済み] Typescript Interface - 「どちらか一方」のプロパティを必須とすることは可能か?
2022-04-26 10:35:06
質問
変な質問かもしれませんが、どちらかのプロパティが必要なインターフェースを作ることは可能なのでしょうか?
では、例えば...
interface Message {
text: string;
attachment: Attachment;
timestamp?: number;
// ...etc
}
interface Attachment {...}
上記の場合、どちらか一方を
text
または
attachment
が存在します。
今、私がやっているのはこの方法です。少し冗長だと思いました(slackにbotkitと入力する)。
interface Message {
type?: string;
channel?: string;
user?: string;
text?: string;
attachments?: Slack.Attachment[];
ts?: string;
team?: string;
event?: string;
match?: [string, {index: number}, {input: string}];
}
interface AttachmentMessageNoContext extends Message {
channel: string;
attachments: Slack.Attachment[];
}
interface TextMessageNoContext extends Message {
channel: string;
text: string;
}
解決方法は?
ユニオン型を使えばいいんです。
interface MessageBasics {
timestamp?: number;
/* more general properties here */
}
interface MessageWithText extends MessageBasics {
text: string;
}
interface MessageWithAttachment extends MessageBasics {
attachment: Attachment;
}
type Message = MessageWithText | MessageWithAttachment;
テキストと添付ファイルの両方を許可したい場合は、次のように記述します。
type Message = MessageWithText | MessageWithAttachment | (MessageWithText & MessageWithAttachment);
関連
-
[解決済み】Typescriptで、! (エクスクラメーションマーク/バン)演算子でメンバを再参照するのは?
-
[解決済み] TypeScriptでパラメータとして強く型付けされた関数は可能か?
-
[解決済み] TypeScriptでオブジェクトに動的にプロパティを割り当てるには?
-
[解決済み] Typescript オブジェクトのインデックス付きメンバの型を強制する?
-
[解決済み] Typescript は ?演算子をサポートしていますか?(そして、それは何と呼ばれているのでしょうか?)
-
[解決済み] Typescript によるインターフェース型チェック
-
[解決済み] TypeScriptでインターフェースファイルの定義に基づいたオブジェクトを作成するには?
-
[解決済み] Typescriptで型の拡張は可能か?
-
[解決済み] typescript インターフェースは、次の2つのプロパティのうちどちらかが存在する必要があります。
-
[解決済み] 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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Jest で typescript を使用して identity-obj-proxy を使用すると未定義が返される
-
[解決済み] Typescript コンパイルエラー: error TS1109: 期待される式
-
[解決済み] as "というキーワードは何を意味するのでしょうか?
-
[解決済み] TypeScriptでfetchを使う方法
-
[解決済み] フォーインステートメント
-
[解決済み] オブジェクトの配列に対してインターフェースを定義するには?
-
[解決済み] TypeScriptの非同期関数でプロミスを返す
-
[解決済み] TypeScript で `window` に新しいプロパティを明示的に設定するにはどうすればよいですか?
-
[解決済み] チェックした後に○○の表現が変わっている
-
[解決済み] typescript インターフェースは、次の2つのプロパティのうちどちらかが存在する必要があります。