Extraer valores de un arreglo como tipos de Typescript
Básicamente, ¿hay una manera de extraer los valores de un arreglo como tipos de cadena? Aquí está el código en pseudocódigo:
class A
{
public keys = ['name', 'age']
}
type ArrayKeys = P in A['keys'] // 'name' or 'age'
Cómo limitar ArrayKeys para que tengan los valores posibles de A['keys'].
Respuesta #1
Necesitarás asegurarle a TypeScript que keys no cambiará añadiendo un casteo de as const (de lo contrario, TypeScript simplemente asumirá que es un array de strings), ten en cuenta que esto hará que TypeScript lo haga cumplir. No podrás cambiar el array.
Después de eso, es bastante simple:
class A
{
public keys = ['name', 'age'] as const
}
type ArrayKeys = A['keys'][number];
En el patio de juegos.
La parte [number] es la "accesando" del valor del array. (Array<T>)[number] siempre será T.
Respuesta #2
No creo que puedas hacer eso literalmente, ya que, por supuesto, los tipos son una característica estática en tiempo de compilación y los arreglos son una característica dinámica en tiempo de ejecución. ...a menos que agregues const como nos muestra Madara Uchiha.
Pero podrías usar un enum de cadenas en lugar de un arreglo, y luego obtener sus valores para llenar el arreglo.
enum ArrayKeys {
name, age
}
class A {
public keys = Object.keys(ArrayKeys).filter(key => isNaN(Number(key)));
}
En el patio de juegos.
Esto también tiene la ventaja de proporcionar ArrayKeys.name y ArrayKeys.age como valores de enumeración.
