TypeScript: Convertir un arreglo de cadenas a sus elementos
Digamos que tengo un arreglo const arr=['key1', 'key2', 'key3']. ¿Cómo hago un tipo como
type Test = { str: Items<arr> }
¿para que los tipos Test tengan un atributo str que sea 'key1', 'key2', 'key3'?
Respuesta #1
Por defecto, TypeScript inferirá el tipo de arr como string[]. Si queremos inferirlo como ['key1', 'key2', 'key3'], podemos hacerlo de dos maneras: as const o as ['key1', 'key2', 'key3'].
Para obtener el tipo unión de los valores de un objeto, necesitas pasar una unión de índices del objeto como un índice de tipo. type ValueOf<T>=T[keyof T]. Pero en este caso tenemos un arreglo, así que solo [number] será suficiente.
const arr = ['key1', 'key2', 'key3'] as const;
type Test = { str: typeof arr[number] }
const test: Test = {
str: 'key1'
}
Enlace al playground de TypeScript
Respuesta #2
Define un tipo solo para los valores de la propiedad str por separado. Luego úsalo al definir tu tipo personalizado Type.
Algo como lo siguiente:
type Str = 'key1' | 'key2' | 'key3';
type Type = { str: Str }
