【发布时间】:2019-10-13 01:10:27
【问题描述】:
我正在使用Array.filter 和instanceof 从更通用的数组中获取某种类型的所有对象。
let cars:Car[] = this.gameObjects.filter(go => go instanceof Car)
这行得通!但是打字稿编译器不同意返回的类型都是 Car 类型。
类型“GameObject[]”不可分配给类型“Car[]”
在Typescript GitHub 上,这个问题被认为是通过为array.filter 添加一个接口来解决的。这对我不起作用,它仍然给出同样的错误。您可以将此代码粘贴到typescript playground:
中进行尝试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)
我在这里遗漏了什么吗?如何按类型过滤数组并取回正确类型的数组?
【问题讨论】:
标签: arrays typescript generics interface