Búsqueda de sitios web

typescript - ¿Cómo obtener solo arreglos u otro tipo de una interfaz?


Tengo una interfaz así:

interface Car {
  model: string;
  owners: string[];
}

Y quiero obtener solo las propiedades del arreglo:

type NewCar = OnlyArrays<Car>

Y esto será igual a:

type NewCar = {
  owners: string[];
}

Escriba que no es importante, arreglo solo como ejemplo.

He probado este código pero no funciona:

function getCar<T = Car>(id: string): { [P in keyof T]: T[P] extends array ? string[] : string; };

Respuesta #1

Puedes declarar un tipo mapeado y volver a asignar las claves (docs) para incluir solo aquellas claves cuyo valor extienda un arreglo:

type OnlyArrays<T> = {
  [K in keyof T as T[K] extends Array<infer _> ? K : never]: T[K]
}

type NewCar = OnlyArrays<Car>
// type NewCar = { owners: string[] }

Área de juego de TypeScript