Ich möchte ein typerzwungenes Array von Elementen deklarieren und daraus einen Unionstyp ableiten können. Dieses Muster funktioniert, wenn Sie den Elementen im Array keinen expliziten Typ zuweisen. Ich bin mir nicht sicher, wie ich es am besten erklären soll. Hier ist ein Beispiel:
BEISPIEL 1
type Pair = {
key: string;
value: number;
};
const pairs: ReadonlyArray<Pair> = [
{ key: 'foo', value: 1 },
{ key: 'bar', value: 2 },
] as const;
type Keys = typeof pairs[number]['key']
BEISPIEL 2
type Data = {
name: string;
age: number;
};
const DataRecord: Record<string, Data> = {
foo: { name: 'Mark', age: 35 },
bar: { name: 'Jeff', age: 56 },
} as const;
type Keys = keyof typeof DataRecord;
Hier ist ein Beispiel für das Ableiten der Schlüssel bei der Verwendung as const
. Ich möchte dasselbe Verhalten, aber das Array wird explizit eingegeben.
const pairs = [
{ key: 'foo', value: 1 },
{ key: 'bar', value: 2 },
] as const;
type Keys = typeof pairs[number]['key']; // "foo" | "bar"
gewünschter Wert der Schlüssel: "foo"|"bar"
Istwert der Schlüssel: string
possibleKeys = ['foo', 'bar'] as const; type Keys = typeof possibleKeys[number]; type Pair = { key: Keys, value: number };
aber Sie müssen die möglichen Schlüssel noch explizit auflisten.
key
Attribut desPair
Typs den gewünschten Typ geben, dann sollte es so funktionieren, wie Sie es geschrieben haben.