gpt4 book ai didi

typescript - 过滤通用类型

转载 作者:搜寻专家 更新时间:2023-10-30 21:08:23 24 4
gpt4 key购买 nike

我正在尝试使用 TypeScript 编写一个函数,该函数允许我根据对象的类型过滤对象列表。结果应该是一个允许我执行以下任一操作的函数:

filter<Foo>(items);

filter(items, Foo);

我一直在尝试通过以下方式做到这一点:

class Foo {
public constructor(public name: string, public type: string) {

}
}

class Bar extends Foo { }

const items: Foo[] = [
new Foo('Foo', 'A'),
new Bar('bar', 'A'),
new Foo('baz', 'B'),
];

const filter = <T extends Foo>(items: any[], typeT: T): T[] => {
return items.filter(item => item instanceof typeT)
};

console.log(filter(items, Foo));

但这行不通。

我怎样才能让它工作?

TypeScript example

最佳答案

当你传入类型时,你实际上是在传入类的构造函数。您的签名正在传递 T 的实例。你应该尝试:

const filter = <T extends Foo>(items: any[], typeT: new (...params : any[]) => T): T[] => {
return items.filter(item => item instanceof typeT)
};

注意:在您的示例中,数组中的所有项目都将通过过滤器,因为 Bar 是从 Foo 派生的,因此也是Foo 的实例。如果你只想要 Foo 类型的对象而不是派生对象,你可以使用 item.constructor == typeT

关于typescript - 过滤通用类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47637124/

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