Ich möchte eine Entity Map so definieren, dass die Schlüssel immer IDs eines anderen Objekts eines bestimmten Typs sein müssen. Die gewünschte Nutzung wäre so etwas wie:Typspezifische IDs mit FlowType
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
};
Mein Anwendungsfall ist, dass ich eine normierte Objektstruktur haben will, die Beziehungen über IDs verwaltet. Aber da die IDs alle den gleichen zugrunde liegenden Typ aufweisen (z. B. string
oder number
), wäre es möglich, versehentlich etwas wie das obige Beispiel zu codieren. Ich hoffe, dass FlowType dazu beitragen kann, dies zu verhindern, indem ich immer nur den korrekten ID-Typ referenziere, wenn ich meine Maps programmatisch erstelle.
Yep, Ihre Antwort ist einfach, wo ich in meinem Denken endete. Ich stimme zu, dass mein ursprünglicher Anwendungsfall derzeit in Flow nicht möglich scheint, und stimme weiterhin zu, dass der Fehlerbericht auf der Deklarationsseite und nicht auf der Website irreführend ist. :) Danke, dass Sie sich die Zeit genommen haben, den Beispielcode zusammenzustellen! – Palpatim