gpt4 book ai didi

arrays - typescript 类型检查不适用于数组过滤器

转载 作者:行者123 更新时间:2023-12-04 01:08:03 26 4
gpt4 key购买 nike

我正在使用 Array.filterinstanceof 从更通用的数组中获取某种类型的所有对象。

 let cars:Car[] = this.gameObjects.filter(go => go instanceof Car)

这行得通! 但是 typescript 编译器不同意返回的类型都是 Car 类型。

Type 'GameObject[]' is not assignable to type 'Car[]'



Typescript GitHub 上,这个问题被认为是通过为 array.filter 添加一个接口(interface)来解决的。这对我不起作用,它仍然给出同样的错误。您可以通过将此代码粘贴到 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)

我在这里错过了什么吗?如何按类型过滤数组并取回正确类型的数组?

最佳答案

要更改过滤器函数的返回类型,您必须使用如下所示的类型保护函数。你也不需要扩展 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)

关于arrays - typescript 类型检查不适用于数组过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56326396/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com