gpt4 book ai didi

javascript - 如何通过 TypeScript 中的泛型类型过滤类型列表?

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

我需要一个函数来返回候选列表中给定类型的所有实例,所有实例都派生自一个公共(public)父类(super class)。

例如我可以写:

class A {
protected children: A[] = [];

getChildrenOfType<T extends A>(): T[] {
let result: T[] = [];
for (let child of this.children) {
if (child instanceof T)
result.push(<T>child);
}

return result;
}
}

例如

class B: extends A {}
class C: extends B {}
class D: extends A {}

等等

但是,这不会编译。 child instanceof T 给了我“'T' 只指一个类型,但在这里被用作一个值”。但是,任何具体类(例如 C)都可以在那里工作。显然是泛型导致了问题。那种情况下使用的正确结构是什么?是否还需要其他东西来实现这种通用过滤?

最佳答案

您可以使用此代码。

class A {
protected children: A[] = [];

getChildrenOfType<T extends A>(t: new (...args: any[]) => T): T[] {
let result: T[] = [];
for (let child of this.children) {
if (child instanceof t)
result.push(<T>child);
}

return result;
}
}

instanceof 的右侧需要是构造函数,例如new() => MyClass。您可以将其作为参数提供给该方法。

getChildrenOfType 方法可以这样使用:

var a = new A();
// push some childs to a.children
a.getChildrenOfType(B)

Check it out on the playground .

关于javascript - 如何通过 TypeScript 中的泛型类型过滤类型列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41921868/

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