Этот синтаксис:
[index:number]: { Ubicacion ?: string, Nombre ?: string }
Является сигнатурой индекса , определяющим индексируемый тип.И индексируемый тип - это тип, к которому мы можем «индексировать».
Подробнее о них можно прочитать здесь: https://www.typescriptlang.org/docs/handbook/interfaces.html
А вот пример из документации:
interface StringArray {
[index: number]: string;
}
let myArray: StringArray;
myArray = ["Bob", "Fred"];
let myStr: string = myArray[0];
Таким образом, это не определение конкретного именованного свойства, а предоставление способа «индексировать» ваш тип.
Использование только индексатора
С твоей структурой это сработало для меня:
private vehiculo: vehiculointerface = [{
Ubicacion: "some string",
Nombre: "some id"
},
{
Ubicacion: "other string",
Nombre: "other id"
}]
Я рассматриваю это как массив объектов.(Не уверен, почему у вас есть свойство индексатора для информации, которая не предназначена для обработки в виде массива?)
Затем вы можете получить к нему доступ в шаблоне следующим образом:
<div *ngFor="let item of vehiculo">
{{ item.Ubicacion}}; {{ item.Nombre}}
</div>
Использование индексатора с другими участниками
На самом деле я не работал с индексатором с другими участниками, поэтому я не совсем уверен, чего вы пытаетесь достичь.Но что-то вроде этого также работало для меня:
private vehiculo: vehiculointerface = {
placa: "some string",
id: "some id"
}
ngOnInit() {
this.vehiculo["some index"] = {
Ubicacion: "some string",
Nombre: "some id"
}
this.vehiculo["other index"] = {
Ubicacion: "other string",
Nombre: "other id"
}
console.log(JSON.stringify(this.vehiculo));
}
Обратите внимание на то, как неиндексированные члены определены независимо от индексатора.
Приведенный выше код определяет основнойСвойства интерфейса, затем использует индексатор для установки дополнительных значений.
Полученная структура выглядит следующим образом:
{
"placa":"some string",
"id":"some id",
"some index":{"Ubicacion":"some string","Nombre":"some id"},
"other index":{"Ubicacion":"other string","Nombre":"other id"}
}
Затем я получил доступ к ней в шаблоне, используя этот код:
<div *ngFor="let item of vehiculo2 | keyvalue">
{{ item.key}}; {{ item.value}}
</div>
Но обратите внимание, что значение для индексированных свойств отображается как [object, Object]
, потому что они имеют тип { Ubicacion ?: string, Nombre ?: string }
Вот блик стека: https://stackblitz.com/edit/angular-indexer-deborahk