我正在使用Array.filter
和instanceof
从一个更通用的数组中获取所有特定类型的对象。
let cars:Car[] = this.gameObjects.filter(go => go instanceof Car)
这个可以工作!但是typescript编译器并不认同返回类型都是Car类型。在Typescript GitHub上,这个问题通过为array.filter添加接口来解决。但对我来说没有用,它仍然会出现相同的错误。您可以在typescript playground中尝试将此代码粘贴进去。类型“GameObject []”不能赋值给类型“Car []”
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)
我有点不明白,如何按类型过滤数组并返回正确类型的数组?
gameObjects.filter((obj: any): obj is Car => obj instanceof Car)
。甚至可以省略: any
,因为它会从gameObjects
数组中自动推断出来。 - Xerillio