使用 typescript interface & abstract class 而不指定泛型类型

Use typescript interface & abstract class without specifying generic types

我已经创建了一个接口和抽象 class 沿着这些线:

interface ITest<A, B> {
    testFunc: (input: A) => B;
}

abstract class AClass<A, B> {
    abstract testFunc: (input: A) => B;
}

我有多个扩展 AClass 的子 class 和多个使用 AB 的不同类型实现 ITest 的对象。例如:

class SubClass1 extends AClass<number, string> {...}
class SubClass2 extends AClass<string[], boolean> {...}

对于抽象 class 或接口,我假设我能够声明可以保存这些类型的变量而无需特定的泛型类型参数,因为我只希望它成为 [=14= 的实例] 不考虑泛型类型,按照这些行:

let aClass: AClass; // Could hold SubClass1 or SubClass2
let iTests: ITest[];

但是我收到一条错误消息,说我的泛型类型需要两个类型参数。设置默认类型参数 and/or 的唯一方法是使用 any 作为它们的通用类型参数(例如 ITest<any, any>[])声明这些变量吗?

您将使用 aClassiTests 所指的任何具体类型。如果他们要在不同的时间引用不同的类型,那么您将使用一个联合列出他们可能引用的类型。例如,如果 aClass 可能需要引用 SubClass1 的实例或 SubClass2 的实例,则:

let aClass: SubClass1 | SubClass2;

any, any 是最坏的情况,您根本不知道具体类型是什么。

您说过您有 10 多个。如果你真的需要使用一个可能引用这 10+ 类 个实例的单个变量,那么定义一个联合类型可能是值得的:

type AnySubClass = SubClass1 | SubClass2 | SubClass3/*...*/;

...然后将其用于 aClass