Me gustaría declarar una matriz de elementos de tipo obligatorio y poder derivar un tipo de unión a partir de ella. Este patrón funciona si no proporciona explícitamente un tipo a los elementos de la matriz. No estoy seguro de cómo explicarlo mejor, así que aquí hay un ejemplo:
EJEMPLO 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']
EJEMPLO 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;
Aquí hay un ejemplo de derivación de las claves cuando se usa as const
. Quiero este mismo comportamiento pero con la matriz que se escribe explícitamente.
const pairs = [
{ key: 'foo', value: 1 },
{ key: 'bar', value: 2 },
] as const;
type Keys = typeof pairs[number]['key']; // "foo" | "bar"
valor deseado de claves: "foo"|"bar"
valor real de las claves: string
possibleKeys = ['foo', 'bar'] as const; type Keys = typeof possibleKeys[number]; type Pair = { key: Keys, value: number };
pero aún necesita enumerar explícitamente las posibles claves.
key
atributo delPair
tipo el tipo que desee, entonces debería funcionar como lo ha escrito.