Kok*_*oko 3 arrays generics interface typescript
我正在使用Array.filter和instanceof从更通用的数组中获取某种类型的所有对象。
let cars:Car[] = this.gameObjects.filter(go => go instanceof Car)
Run Code Online (Sandbox Code Playgroud)
这有效!但是打字稿编译器不同意返回的类型都是 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)
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么吗?如何按类型过滤数组并取回正确类型的数组?
要更改过滤器函数的返回类型,您必须使用如下所示的类型保护函数。你也不需要扩展 Array 类型,因为它已经在 TypeScript 上定义了。
class GameObject {
}
class Car {
drive() {
}
}
let isCar = (obj: any): obj is Car => {
return obj instanceof Car;
}
let gameObjects: GameObject[] = [new Car(), new Car()]
let cars: Car[] = gameObjects.filter(isCar)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2859 次 |
| 最近记录: |