Я использую Array.filter
и instanceof
, чтобы получить все объекты определенного типа из более общего массива.
let cars:Car[] = this.gameObjects.filter(go => go instanceof Car)
Это работает! Но машинописьКомпилятор не согласен с тем, что все возвращаемые типы относятся к типу Car.
Тип 'GameObject []' нельзя назначить типу 'Car []'
На Typescript GitHub эта проблема считается решенной путем добавления интерфейса для array.filter.Это не работает для меня, это все равно дает ту же ошибку.Вы можете попробовать это, вставив этот код в машинописную игровую площадку:
interface Array<T> {
filter<U extends T>(pred: (a: T) => a is U): U[];
}
class Car {
drive() {
}
}
class GameObject {
}
let gameObjects:GameObject[] = [new Car(), new Car()]
let cars:Car[] = gameObjects.filter((go) => go instanceof Car)
Я что-то здесь упускаю?Как я могу отфильтровать массив по типу и получить массив правильного типа?