Как проверить, соответствует ли массив классу?

#typescript

Вопрос:

Допустим, у меня есть класс с именем Форма.

 export class Form {}
 

Как я могу проверить, является ли переменная массивом Form ?

 const foo: Form = new Form()

if (foo instanceof Form) {}

const baz: Form[] = [new Form(), new Form()]

?
 

Ответ №1:

Вы сказали I am not worrying about different types Хорошо, просто проверьте baz , является ли массив массивом или нет Array.isArray(value) , а затем проверьте единственный первый элемент по экземпляру, как это:

 if (Array.isArray(baz) amp;amp; baz.length > 0 amp;amp; baz[0] instanceof Form) {
}
 

Ответ №2:

Вы можете использовать Array.prototype.every , чтобы проверить, действительно ли каждая отдельная запись в вашем baz массиве является экземпляром Form :

 const baz = [new Form(), new Form()];
console.log(baz.every(entry => entry instanceof Form));  // true

const baz2 = [new Form(), new Form(), ''];
console.log(baz2.every(entry => entry instanceof Form));  // false
 

Смотрите Доказательство концепции на игровой площадке TypeScript.

Комментарии:

1. Я не беспокоюсь о разных типах в массиве. Итак, я спрашиваю, существует ли какой-либо синтаксис условий, подобный baz instanceof Form[] ?

2. @berkan Это именно то, что делает мой ответ. Чтобы проверить , существует ли массив Form[] , это означает, что вам нужно проверить, является ли каждый отдельный элемент в массиве экземпляром Form

3. @berkan Нет, такого синтаксиса baz instanceof Form[] нет . Вам нужно создать цикл и проверить каждый элемент массива