指定されたタイプのすべてのフィールドがオプションであるフロー内のジェネリックタイプを定義する方法

Rohit Bansal

typescriptでジェネリック型を非常に簡単に定義でき、渡されたジェネリック型に関してすべてのフィールドをオプションにすることができます。このようなタイプのクエリは、すべてのフィールドを取得する必要がなく、オプションのタイプ指定で検証できるため、mongoクエリの結果を定義するためのタイプ定義で非常に役立ちます。

https://www.typescriptlang.org/docs/handbook/advanced-types.html

interface Person {
    name: string;
    age: number;
}

type Partial<T> = {
    [P in keyof T]?: T[P];
}

const p : Partial<Person> = {
    name:"A"
}

フローを使用して同じことを定義する方法。$ Keysを使用できます。しかし、タイプスクリプトで行ったように、別のタイプを定義している間はそのタイプを取得できません。-[Tの​​キーのP] ?: T [P]; Pをフローに入れることができません。https://flow.org/en/docs/types/utilities/#toc-keys

type Person = {
    name: string,
    age: number;    
}

type Partial<T> = {
    [$Keys<T>] : 1;  // doubt here how to get type of prop comes in left
}

const p : Partial<Person> = {
    name:"A"
}

実際クエリの型仕様を作成しようとしています。指定されていないキーにもnullまたはundefinedを指定することはできません。

type Department = {
    _id : string,
    name : string,
    type : string
}

type Person = {
    _id : string,
    name : string,
    age : number,
    department : Department
}

type Query <T> = {
    [P in keyOf T ]?: 1 | Query<T[P]> 
}

type Document<T> = {
    [P in keyOf T ]?: T[P] | Document<T[P]>     
}

const personDepartments  : Query<Person> = {
    name:1, department :{name:1}
}

このクエリは次のような結果を返します

{_id:"1",name:"abc",department:{name:"xyz"}}

ドキュメントタイプにすることができます

const a : Document<Person> = {_id:"1",name:"abc",department:{name:"xyz"}}

したがって、次のように関数を書くことができます

function getResult<T>(query:Query<T>) : Document<t> {
    // code here to query and get result
}

TypeScriptでは非常に簡単です。ですから、フローにも回避策があるはずです。

アレクセイL.

$ Shapeユーティリティを使用できます。

指定されたタイプの形状をコピーしますが、すべてのフィールドをオプションとしてマークします

type Foo = {
  A: string,
  B: number,
  C: string
};

const t: $Shape<Foo> = {
  A: 'a'
};

別のアプローチは、タイプを「拡散」することです(申し訳ありませんが、changelog以外のドキュメントは見つかりません):

type Foo = {
  A: string,
  B: number,
  C: string
};

type Partial<T> = { ...T };

const t: Partial<Foo> = {
  A: 'a'
};

今では本当に部分的で、キースキップできます。

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

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

分類Dev

ジェネリックインターフェイスと演算子のオーバーロード-ジェネリックインターフェイスブロックからのプロシージャをモジュール内でプライベートに設定する方法は?

分類Dev

定義されたpropを持つオブジェクトタイプが、フロー内のオプションのpropを持つオブジェクトタイプのサブタイプではないのはなぜですか?

分類Dev

ジェネリックオブジェクトのプロパティを検証するタイプガードはすべてオプション/ null /未定義ではありません

分類Dev

フィルタリングされたオブジェクトをangularjsのドロップダウンオプションで並べ替える方法

分類Dev

プロパティが既存のオブジェクトのプロパティであるTypescriptインターフェイスを定義する

分類Dev

最初にエンティティフレームワークコード-オブジェクトのタイプが事前定義されたリスト内にあるテーブルからオブジェクトを選択します

分類Dev

オブジェクトのすべてのフィールドのインターフェイスを定義するには、TypeScriptの他のインターフェイスのインスタンスである必要がありますか?

分類Dev

VStudioは、Unoプラットフォームソリューションでのビルドに指定されているヘッドに関係なく、参照されているマルチターゲットプロジェクトのすべてのTargetFrameworksを常にコンパイルします。

分類Dev

ネイティブクエリ結果にマッピングするときにPOJOでオプションのフィールドを定義する方法

分類Dev

フォームコントロールタイプをチェックするときのVBAランタイムエラー1004「アプリケーション定義またはオブジェクト定義エラー」

分類Dev

インターフェイスのサンプルのみが指定されたオブジェクトのリストを初期化する方法は?

分類Dev

バックオフィスのカスタムアプリケーションタイプを定義する

分類Dev

指定されたすべてのモジュールがロードされる前に、requirejsがユーザーナビゲーションのためにスクリプトエラーを生成するタイミングを検出できますか?

分類Dev

TypeScriptで配列からプロパティがフェッチされるオブジェクトのタイプを定義する方法

分類Dev

アプリケーションで使用されるそのタイプのリストが複数ある場合に、モデルにカスタムオブジェクトシーケンスプロパティを保持する方法

分類Dev

サークルインタラクションと、このインタラクション内のマップに表示されているすべてのレイヤーのすべてのフィーチャとの交点を見つける方法は?

分類Dev

オプションのフィールドを持つ既存のインターフェイスからナロータイプスクリプトインターフェイスを作成するにはどうすればよいですか?

分類Dev

タイプスクリプトでインライン編集ボタンがクリックされたときにオブジェクトのフィールド値を印刷する方法

分類Dev

フロータイプチェック:reduxアクションで未定義の可能性のあるプロパティを反復する方法は?

分類Dev

TypeScript定義ファイルでネストされたオプションを定義する最良の方法

分類Dev

ジャクソンのオプショナル内にネストされているタイプのカスタムデシリアライザーを指定する方法はありますか?

分類Dev

コレクションのネストされたプロパティによってフィルターオプションをグループ化する方法。単一のチェックボックス

分類Dev

データストアインデックスを使用するすべてのマイクロサービス(モジュール)で定義する必要がありますか、それともルートアプリケーションで定義する必要がありますか?

分類Dev

バッチファイルを使用してタスクスケジューラの開始(オプション)プロパティを設定する方法

分類Dev

すべてのオプションのプロパティを持つインターフェイスのタイプガードを作成する

分類Dev

インターフェイスで計算されたプロパティ名は、タイプがリテラルタイプまたは「一意のシンボル」タイプである式を参照する必要があります

分類Dev

配列内のフィルタリングされたオブジェクトのセクションにデータをどのようにプッシュする必要がありますか?

分類Dev

既存のタイプのすべてのプロパティを持つがオプションの新しいフロータイプを作成する方法

Related 関連記事

  1. 1

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

  2. 2

    ジェネリックインターフェイスと演算子のオーバーロード-ジェネリックインターフェイスブロックからのプロシージャをモジュール内でプライベートに設定する方法は?

  3. 3

    定義されたpropを持つオブジェクトタイプが、フロー内のオプションのpropを持つオブジェクトタイプのサブタイプではないのはなぜですか?

  4. 4

    ジェネリックオブジェクトのプロパティを検証するタイプガードはすべてオプション/ null /未定義ではありません

  5. 5

    フィルタリングされたオブジェクトをangularjsのドロップダウンオプションで並べ替える方法

  6. 6

    プロパティが既存のオブジェクトのプロパティであるTypescriptインターフェイスを定義する

  7. 7

    最初にエンティティフレームワークコード-オブジェクトのタイプが事前定義されたリスト内にあるテーブルからオブジェクトを選択します

  8. 8

    オブジェクトのすべてのフィールドのインターフェイスを定義するには、TypeScriptの他のインターフェイスのインスタンスである必要がありますか?

  9. 9

    VStudioは、Unoプラットフォームソリューションでのビルドに指定されているヘッドに関係なく、参照されているマルチターゲットプロジェクトのすべてのTargetFrameworksを常にコンパイルします。

  10. 10

    ネイティブクエリ結果にマッピングするときにPOJOでオプションのフィールドを定義する方法

  11. 11

    フォームコントロールタイプをチェックするときのVBAランタイムエラー1004「アプリケーション定義またはオブジェクト定義エラー」

  12. 12

    インターフェイスのサンプルのみが指定されたオブジェクトのリストを初期化する方法は?

  13. 13

    バックオフィスのカスタムアプリケーションタイプを定義する

  14. 14

    指定されたすべてのモジュールがロードされる前に、requirejsがユーザーナビゲーションのためにスクリプトエラーを生成するタイミングを検出できますか?

  15. 15

    TypeScriptで配列からプロパティがフェッチされるオブジェクトのタイプを定義する方法

  16. 16

    アプリケーションで使用されるそのタイプのリストが複数ある場合に、モデルにカスタムオブジェクトシーケンスプロパティを保持する方法

  17. 17

    サークルインタラクションと、このインタラクション内のマップに表示されているすべてのレイヤーのすべてのフィーチャとの交点を見つける方法は?

  18. 18

    オプションのフィールドを持つ既存のインターフェイスからナロータイプスクリプトインターフェイスを作成するにはどうすればよいですか?

  19. 19

    タイプスクリプトでインライン編集ボタンがクリックされたときにオブジェクトのフィールド値を印刷する方法

  20. 20

    フロータイプチェック:reduxアクションで未定義の可能性のあるプロパティを反復する方法は?

  21. 21

    TypeScript定義ファイルでネストされたオプションを定義する最良の方法

  22. 22

    ジャクソンのオプショナル内にネストされているタイプのカスタムデシリアライザーを指定する方法はありますか?

  23. 23

    コレクションのネストされたプロパティによってフィルターオプションをグループ化する方法。単一のチェックボックス

  24. 24

    データストアインデックスを使用するすべてのマイクロサービス(モジュール)で定義する必要がありますか、それともルートアプリケーションで定義する必要がありますか?

  25. 25

    バッチファイルを使用してタスクスケジューラの開始(オプション)プロパティを設定する方法

  26. 26

    すべてのオプションのプロパティを持つインターフェイスのタイプガードを作成する

  27. 27

    インターフェイスで計算されたプロパティ名は、タイプがリテラルタイプまたは「一意のシンボル」タイプである式を参照する必要があります

  28. 28

    配列内のフィルタリングされたオブジェクトのセクションにデータをどのようにプッシュする必要がありますか?

  29. 29

    既存のタイプのすべてのプロパティを持つがオプションの新しいフロータイプを作成する方法

ホットタグ

アーカイブ