キーが常に指定されたタイプの他のオブジェクトのIDでなければならないようにエンティティマップを定義したいと思います。希望利用がのようになります。フロータイプの特定のIDを入力してください
export type Id<T> = {
id: string
};
export type Foo = Id<Foo> & {
val: number
};
// type Foo is now {id: Id<Foo>, val: number}
export type Bar = Id<Bar> & {
val: number
};
// type Bar is now {id: Id<Bar>, val: number}
// FooMap should only be able to store objects of type foo, referenced by
// IDs of type Id<Foo>
export type FooMap = {
[key: Id<Foo>]: Foo
};
const foo1: Foo = { id: "foo1", val: 1 };
const foo2: Foo = { id: "foo2", val: 2 };
const bar1: Bar = { id: "bar1", val: 3 };
// This would pass type checking:
const fooMap: FooMap = {
[foo1.id]: foo1,
[foo2.id]: foo2
};
// But this would fail type checking:
const badMap: FooMap = {
[bar1.id]: foo1
};
私のユースケースは、私はIDを経由して関係を管理正規化されたオブジェクト構造を持つようにしたいということです。しかしIDはすべて同じ基底型(例:string
またはnumber
)であるため、上記の例のようなコードを誤ってコード化する可能性があります。私は、FlowTypeが、プログラムでマップを構築しているときに正しいIDの型だけを参照することを強制することによって、それを防ぐのに役立つことを願っています。
うんにこれをコピーして貼り付けることができます。私は、Flowでオリジナルのユースケースが現在可能ではないように思っています。また、サイトを使用するのではなく、宣言サイトのエラーレポートが誤解を招くことに同意します。 :)サンプルコードをまとめる時間をとってくれてありがとう! – Palpatim