typescript - matriz - recorrer array de objetos javascript
¿Cómo puedo definir una matriz de objetos? (4)
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 le proporciona una verificación de tipo lista para usar.
enum TestStatus {
Available, // 0
Ready, // 1
Started, // 2
}
class Test {
status: TestStatus
}
var test = new Test();
test.status = TestStatus.Available; // type and spelling is checked for you,
// and the sequence ID is automatic
Los valores anteriores se asignarán automáticamente, por ejemplo, "0" para "Disponible", y puede acceder a ellos utilizando
TestStatus.Available
.
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ía 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 lo contiene.
class TestStatus {
id: number
name: string
constructor(id, name){
this.id = id;
this.name = name;
}
}
type Statuses = Array<TestStatus>;
var statuses: Statuses = [
new TestStatus(0, "Available"),
new TestStatus(1, "Ready"),
new TestStatus(2, "Started")
]
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
userTestStatus[3].nammme
si usé algo como
userTestStatus[3].nammme
por error.
Algunas reglas de
tslint
deshabilitan el uso de [], mensaje de ejemplo: el
Array type using ''T[]'' is forbidden for non-simple types. Use ''Array<T>'' instead.
Array type using ''T[]'' is forbidden for non-simple types. Use ''Array<T>'' instead.
Entonces lo escribirías como:
var userTestStatus: Array<{ id: number, name: string }> = Array(
{ "id": 0, "name": "Available" },
{ "id": 1, "name": "Ready" },
{ "id": 2, "name": "Started" }
);
Es mejor usar una matriz nativa en lugar de un literal de objeto con propiedades similares a números, de modo que la numeración (así como muchas otras funciones de la matriz) se ocupan de forma inmediata.
Lo que está buscando aquí es una definición de interface línea para su matriz que defina cada elemento en esa matriz, ya sea que esté inicialmente presente o que se presente más tarde:
let userTestStatus: { id: number, name: string }[] = [
{ "id": 0, "name": "Available" },
{ "id": 1, "name": "Ready" },
{ "id": 2, "name": "Started" }
];
userTestStatus[34978].nammme; // Error: Property ''nammme'' does not exist on type [...]
Si está inicializando su matriz con valores de inmediato, la definición de tipo explícita no es necesaria; TypeScript puede inferir automáticamente la mayoría de los tipos de elementos de la asignación inicial:
let userTestStatus = [
{ "id": 0, "name": "Available" },
...
];
userTestStatus[34978].nammme; // Error: Property ''nammme'' does not exist on type [...]
Lo que tienes arriba es un objeto, no una matriz.
Para hacer una matriz, use
[
&
]
para rodear sus objetos.
userTestStatus = [
{ "id": 0, "name": "Available" },
{ "id": 1, "name": "Ready" },
{ "id": 2, "name": "Started" }
];
Aparte de eso, TypeScript es un superconjunto de JavaScript, por lo que lo que sea válido JavaScript será TypeScript válido, por lo que no se necesitan otros cambios.
Aclaración de comentarios de OP ... que necesita una definición para el modelo publicado
Puede usar los tipos definidos aquí para representar su modelo de objeto:
type MyType = {
id: number;
name: string;
}
type MyGroupType = {
[key:string]: MyType;
}
var obj: MyGroupType = {
"0": { "id": 0, "name": "Available" },
"1": { "id": 1, "name": "Ready" },
"2": { "id": 2, "name": "Started" }
};
// or if you make it an array
var arr: MyType[] = [
{ "id": 0, "name": "Available" },
{ "id": 1, "name": "Ready" },
{ "id": 2, "name": "Started" }
];