Typescript:ジェネリック型が設定されている場合はオプションのpropが必要になります

サイモン・ヘニッシュ

こんなことしたい

export interface Foobar {
  foo: string;
  bar?: any;
}

export interface Foobar<T> {
  bar: T;
}

、したがって、barジェネリック型が渡されない場合はオプションの小道具ですが、ジェネリック型が設定されている場合はジェネリック型である必要があります...つまり、できるようにしたい

const one: Foobar = { foo: 'foo' }; // bar is not required here
const two: Foobar<number> = { foo: 'foo', bar: 123 }; // `bar` is required here

上記の提案はスローします

'Foobar'のすべての宣言には、同一の型パラメーターが必要です。

他の方法でこれを達成することは可能ですか?

jcalz

ユースケースが何であるかはわかりませんが、インターフェイスの代わりにタイプエイリアスを使用できる場合は、Foobar次のように定義できます

type Foobar<T = never> = {
  foo: string;
} & ([T] extends [never] ? { bar?: any } : { bar: T });

これは、使用する一般的なパラメータのデフォルトセットにTneverあなたがそれを指定しない場合、および条件付きタイプは、オプションのいずれかを選択することがbar必要かbarの種類に応じてTそれはあなたが望むように機能します:

const one: Foobar = { foo: "foo" }; // bar is not required here
const two: Foobar<number> = { foo: "foo", bar: 123 }; // `bar` is required here

お役に立てば幸いです。幸運を!

コードへのリンク

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Typescript:別のオプションのタイプが設定されている場合は、タイプを設定する必要があります

分類Dev

[コマンドラインインターフェイス]をクリックします。他のオプションオプションが設定されていない場合は、オプションを必須にします。

分類Dev

最初の<select>が何らかのオプションに設定されている場合、2番目の<select>検証が必要になります

分類Dev

Typescript:すべての小道具がオプションの場合にオブジェクトを必要としない方法はありますか?

分類Dev

オブジェクト参照がオブジェクトのインスタンスに設定されていません。セッションがnullの場合にログインページにリダイレクトする方法

分類Dev

ジェネリックと条件が型定義で使用されている場合、Typescriptがswitchステートメントの型を推測しない

分類Dev

ジェネリック型指定引数-オプションの場合もありますが、常にではありません

分類Dev

選択オプションを要求する方法ユーザーがラジオボタンをチェックしたはい、フォームを送信する前にjQueryまたはJavascriptでチェックされていない場合は削除する必要があります

分類Dev

ソリューションファイル内のプロジェクトにMsBuildプロパティが設定されている場合、カスタムコンパイルエラーをスローする方法はありますか?

分類Dev

変数を参照コレクションに使用する場合の「オブジェクトが無効であるか、設定されていません」

分類Dev

「リンク速度とデュプレックス」NICが「自動ネゴシエーション」以外に設定されている場合、Win10でWake on Lan / WOLが失敗するのはなぜですか?

分類Dev

リーフレット:オプション「watch」が「true」に設定されている場合、後続のmap.locate()がタイムアウトします

分類Dev

C#ジェネリック:2つのコレクションに同じタイプが含まれている必要があるが、コレクションが同じタイプである必要がないジェネリックを宣言するにはどうすればよいですか?

分類Dev

Typescriptで、別のオプションのプロパティが設定されている場合にプロパティを必須にする方法は?

分類Dev

Visual Studioは、デバッグからリリースに切り替えるときにプロジェクトを再構築し、オプションのXMLドキュメントが選択されている場合はその逆になります。

分類Dev

可視性がView.GONEに設定されている場合、TextViewオブジェクトのテキストはどうなりますか?

分類Dev

一部のプロジェクトが複数のソリューションに含まれている場合に、すべてのソリューションに共通のnugetパッケージフォルダーを設定する

分類Dev

テンプレート/ジェネリックにデータ型が必要ない場合はどうなりますか

分類Dev

ジェネリック型がAnyにバインドされている場合のkotlinオーバーロード解決のあいまいさ

分類Dev

Qt :: FramelessWindowHintが設定されている場合、ドロップシャドウは非表示になります

分類Dev

AspNetCore3の予期しない「サイズ制限が設定されている場合はキャッシュエントリでサイズの値を指定する必要があります」というメッセージ

分類Dev

ステートメントオブジェクトが設定されていない場合、PDOStatement :: closeCursor()を呼び出す必要がありますか?

分類Dev

設定方法プッシュボタンは、2行の編集入力ウィジェットにテキストが含まれている場合にのみ機能する必要があります

分類Dev

型パラメーターが指定されていない場合、Javaジェネリックrawクラスがオブジェクトへのすべてのジェネリックを消去するのはなぜですか?

分類Dev

チェックボックス1をクリックすると、チェックボックスがオンになり、チェックボックス2がチェックされていない場合は、チェックされていない状態になります(Androidの場合)

分類Dev

「エラー:アクションはプレーンオブジェクトである必要があります。非同期アクションにはカスタムミドルウェアを使用してください。」というメッセージが表示されるのはなぜですか。エラー?

分類Dev

Type []がオブジェクトにラップされている場合にのみシリアル化できるのはなぜですか?

分類Dev

マングースはオブジェクトを作成する必要がありますが、別のオブジェクトにすでにこのプロパティがある場合は、プロパティをスキップしてください

分類Dev

このスクリプト設定に基づいてトランザクションがロールバックされた場合、スクリプトはカーソル内の次の項目をフェッチしますか?

Related 関連記事

  1. 1

    Typescript:別のオプションのタイプが設定されている場合は、タイプを設定する必要があります

  2. 2

    [コマンドラインインターフェイス]をクリックします。他のオプションオプションが設定されていない場合は、オプションを必須にします。

  3. 3

    最初の<select>が何らかのオプションに設定されている場合、2番目の<select>検証が必要になります

  4. 4

    Typescript:すべての小道具がオプションの場合にオブジェクトを必要としない方法はありますか?

  5. 5

    オブジェクト参照がオブジェクトのインスタンスに設定されていません。セッションがnullの場合にログインページにリダイレクトする方法

  6. 6

    ジェネリックと条件が型定義で使用されている場合、Typescriptがswitchステートメントの型を推測しない

  7. 7

    ジェネリック型指定引数-オプションの場合もありますが、常にではありません

  8. 8

    選択オプションを要求する方法ユーザーがラジオボタンをチェックしたはい、フォームを送信する前にjQueryまたはJavascriptでチェックされていない場合は削除する必要があります

  9. 9

    ソリューションファイル内のプロジェクトにMsBuildプロパティが設定されている場合、カスタムコンパイルエラーをスローする方法はありますか?

  10. 10

    変数を参照コレクションに使用する場合の「オブジェクトが無効であるか、設定されていません」

  11. 11

    「リンク速度とデュプレックス」NICが「自動ネゴシエーション」以外に設定されている場合、Win10でWake on Lan / WOLが失敗するのはなぜですか?

  12. 12

    リーフレット:オプション「watch」が「true」に設定されている場合、後続のmap.locate()がタイムアウトします

  13. 13

    C#ジェネリック:2つのコレクションに同じタイプが含まれている必要があるが、コレクションが同じタイプである必要がないジェネリックを宣言するにはどうすればよいですか?

  14. 14

    Typescriptで、別のオプションのプロパティが設定されている場合にプロパティを必須にする方法は?

  15. 15

    Visual Studioは、デバッグからリリースに切り替えるときにプロジェクトを再構築し、オプションのXMLドキュメントが選択されている場合はその逆になります。

  16. 16

    可視性がView.GONEに設定されている場合、TextViewオブジェクトのテキストはどうなりますか?

  17. 17

    一部のプロジェクトが複数のソリューションに含まれている場合に、すべてのソリューションに共通のnugetパッケージフォルダーを設定する

  18. 18

    テンプレート/ジェネリックにデータ型が必要ない場合はどうなりますか

  19. 19

    ジェネリック型がAnyにバインドされている場合のkotlinオーバーロード解決のあいまいさ

  20. 20

    Qt :: FramelessWindowHintが設定されている場合、ドロップシャドウは非表示になります

  21. 21

    AspNetCore3の予期しない「サイズ制限が設定されている場合はキャッシュエントリでサイズの値を指定する必要があります」というメッセージ

  22. 22

    ステートメントオブジェクトが設定されていない場合、PDOStatement :: closeCursor()を呼び出す必要がありますか?

  23. 23

    設定方法プッシュボタンは、2行の編集入力ウィジェットにテキストが含まれている場合にのみ機能する必要があります

  24. 24

    型パラメーターが指定されていない場合、Javaジェネリックrawクラスがオブジェクトへのすべてのジェネリックを消去するのはなぜですか?

  25. 25

    チェックボックス1をクリックすると、チェックボックスがオンになり、チェックボックス2がチェックされていない場合は、チェックされていない状態になります(Androidの場合)

  26. 26

    「エラー:アクションはプレーンオブジェクトである必要があります。非同期アクションにはカスタムミドルウェアを使用してください。」というメッセージが表示されるのはなぜですか。エラー?

  27. 27

    Type []がオブジェクトにラップされている場合にのみシリアル化できるのはなぜですか?

  28. 28

    マングースはオブジェクトを作成する必要がありますが、別のオブジェクトにすでにこのプロパティがある場合は、プロパティをスキップしてください

  29. 29

    このスクリプト設定に基づいてトランザクションがロールバックされた場合、スクリプトはカーソル内の次の項目をフェッチしますか?

ホットタグ

アーカイブ