Búsqueda de sitios web

typescript - ¿Cómo inferir el índice 0 de una tupla en un array bidimensional de tuplas a tipo literal?


Tengo un tipo de arreglo de tuplas, ¿cómo hacer que TypeScript infiera el índice 0 de las tuplas como una unión?

Ejemplo :

type KV = [string, string];
type KVs = KV[];

function sample(param: KVs) {
  return param.map(([key]) => key);
}

// here result is: string[]
const result = sample([
  ["a", "b"],
  ["c", "d"],
]);

¿Cómo puedo hacer que el tipo de resultado sea un arreglo de "a" | "c"?

Respuesta #1

Puedes usar genéricos:

type KV<T extends string, U extends string> = [T, U];

function sample<T extends string, U extends string>(param: KV<T, U>[]) {
  return param.map(([key]) => key);
}

// result: ("a" | "c")[]
const result = sample([
  ["a", "b"],
  ["c", "d"],
]);

Este tipo KV como una tupla con dos parámetros genéricos, ambos deben ser cadenas, pero también podrían ser un tipo más estrecho como un literal de cadena. En este caso, TypeScript elegirá el tipo más estrecho para un uso dado.

Campo de Juegos TS