У меня есть массив, через который я хочу выполнить цикл, но у меня проблема из-за типа объединения. Мой вопрос заключается в том, что я пропустил в следующем коде, поэтому код Visual Studio не видит, что у меня есть второй необязательный тип для этого конкретного массива?
class Menu {
// name of the menu
name: string;
// list of the ingredients in this menu
// or a list of submenu with its ingredients
list: string[] | Menu[];
hasSubList?: boolean;
}
...
menu: Menu[];
ngOnInit() {
this.loadMenu();
}
ngAfterContentInit() {
this.print();
}
loadMenu(): void {
this.menu = [
{
name: "toast"
list: [
"slide of bread",
],
},
{
name: "Crumble eggs on taste",
hasSubList: true;
list: [
{
name: "Eggs",
list: [
{
"Eggs",
"pepper",
"a pinch of salt",
}
],
},
{
name: "Toast",
list: [
"a slide of bread"
],
},
],
},
];
}
this print(): void {
for(let i=0; i<this.menu.length;i++){
let item = this.menu[i];
console.log(item.name);
for(let j=0; i<item.list.length; j++){
let list = item.list[j];
if(item.hasSubList) {
// HERE
// console intellsense says
// "property 'list' does not exist on type 'string | Menu'
// "property 'list' does not exist on type 'string'
for(let k=0; k< list.list.length; k++}(
console.log(list.list[k]);
}
} else {
console.log(list);
}
}
Просто чтобы повторить сообщение о том, что показывал intellsense;
"property 'list' does not exist on type 'string | Menu'
"property 'list' does not exist on type 'string'
Почему он не проверил меню? потому что «список» существует как тип «Меню»