Estoy creando una matriz de objetos en TypeScript:
userTestStatus xxxx = {
"0": { "id": 0, "name": "Available" },
"1": { "id": 1, "name": "Ready" },
"2": { "id": 2, "name": "Started" }
};
¿Alguien puede decirme cómo podría declarar su tipo correctamente? ¿Es posible hacerlo en línea o necesitaría dos definiciones?
Estoy buscando reemplazar el xxx
con una declaración de tipo, para que más adelante TypeScript me avise si usé algo como userTestStatus[3].nammme
por error.
fuente
let someArray: Array<{ id: number, name: string }> = []
Lo que tienes arriba es un objeto, no una matriz.
Para hacer una matriz, use
[
&]
para rodear sus objetos.Aparte de eso, TypeScript es un superconjunto de JavaScript, por lo que todo lo que sea válido JavaScript será TypeScript válido, por lo que no se necesitan otros cambios.
Puede usar los tipos definidos aquí para representar su modelo de objeto:
fuente
userTestStatus
variable en su IDE favorito ... se muestra el patio de juegos TypeScript{ id: number, name: string; }[]
. Podría envolverlo en una interfaz si lo deseainterface NameThis { id: number, name: string; }
yNameThis[]
como el tipo de matriz.var arr: MyType
, no usaría el nombre de propiedad / declaraciones de índice como"0": { … }
; simplemente usarías el objeto literal en este punto.Algunas
tslint
reglas deshabilitan el uso de [], mensaje de ejemplo:Array type using 'T[]' is forbidden for non-simple types. Use 'Array<T>' instead.
Entonces lo escribirías como:
fuente
Lo que realmente quieres puede ser simplemente una enumeración
Si está buscando algo que se comporte como una enumeración (porque veo que está definiendo un objeto y adjuntando un ID secuencial 0, 1, 2 y contiene un campo de nombre que no desea escribir mal (por ejemplo, nombre vs nombre) , es mejor que defina una enumeración porque la identificación secuencial se ocupa automáticamente y proporciona una verificación de tipo de forma inmediata.
Los valores anteriores se asignarán automáticamente, por ejemplo, "0" para "Disponible", y puede acceder a ellos mediante
TestStatus.Available
. Y Typecript impondrá el tipo cuando pases esos.Si insiste en definir un nuevo tipo como una matriz de su tipo personalizado
Querías una matriz de objetos (no exactamente un objeto con las teclas "0", "1" y "2"), así que definamos primero el tipo de objeto, luego un tipo de matriz que contiene.
fuente
También puedes probar
Para verificar cómo funciona el registro: https://www.typescriptlang.org/docs/handbook/utility-types.html#recordkt
Aquí, en nuestro caso, Record se usa para declarar un objeto cuya clave será una cadena y cuyo valor será de tipo IData, por lo que ahora nos proporcionará inteligencia cuando intentemos acceder a su propiedad y arrojemos un error de tipo en caso de que lo intentemos algo así como userTestStatus [0] .nameee
fuente