Búsqueda de sitios web

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 }