打字稿:如何推断实现接口的 class 类型
Typescript: how to inference class type that implements an interface
提供接口
interface IAnInterface {
}
如何引用和指向实现该接口的 class 类型!
意义!给出一个 class:
class AClassThatImplmentsAnInterface implements IAnInterface {
}
如何引用属于class类型的类型!这相当于:
typeof AClassThatImplementsAnInterface
但是在界面层面!指向实现该接口的所有 classes!
所以如果我这样做:
type IClassTypeMapping = {
[names in SomeLiteralStringUnion]: Class<IAnInterface>
}
当然 Class
不存在于打字稿中!但我想我很好地解释了我在问什么!如何引用 Class<IAnInterface>
!?
的等价物
在 Typescript 中甚至可能吗?
否则如果它只是 classes!我们可以使用 typeof MyClass
!
也适用于上述类型!如果我们正在为 classes 创建一个实现 class!我们总是可以这样做:
export const myMapping = {
Name1: Class1,
Name2: Class2,
// ...
};
// then:
export type MyMappingType = typeof myMapping;
并且为了避免歧义!因为我话多!问题是:如何引用 Class<IAnInterface>
的等价物?打字稿有可能吗?
我假设您正在尝试映射到 class 本身,而不是映射到 class 的实例。所以基本上有的东西是可以构造的。我认为这种类型应该适合你:
type Class<I, Args extends any[] = any[]> = new(...args: Args) => I;
我们声明可以使用 new
关键字和一些参数调用 Class<IAnInterface>
,并且 return 一个 IAnInterface
对象(class实例)。
第二个参数 Args
允许您定义构造函数参数是什么。如果没有参数,它将是一个空数组。
declare const MyClass: Class<IAnInterface, []>;
const instance: IAnInterface = new MyClass();
declare const OtherClass: Class<IAnInterface, [number, string]>;
const otherInstance: IAnInterface = new OtherClass(0, "");
(仅限 Angular)
Angular 在 class 中有一个构建:Type。
您可以在 阅读更多内容。
提供接口
interface IAnInterface {
}
如何引用和指向实现该接口的 class 类型!
意义!给出一个 class:
class AClassThatImplmentsAnInterface implements IAnInterface {
}
如何引用属于class类型的类型!这相当于:
typeof AClassThatImplementsAnInterface
但是在界面层面!指向实现该接口的所有 classes!
所以如果我这样做:
type IClassTypeMapping = {
[names in SomeLiteralStringUnion]: Class<IAnInterface>
}
当然 Class
不存在于打字稿中!但我想我很好地解释了我在问什么!如何引用 Class<IAnInterface>
!?
在 Typescript 中甚至可能吗?
否则如果它只是 classes!我们可以使用 typeof MyClass
!
也适用于上述类型!如果我们正在为 classes 创建一个实现 class!我们总是可以这样做:
export const myMapping = {
Name1: Class1,
Name2: Class2,
// ...
};
// then:
export type MyMappingType = typeof myMapping;
并且为了避免歧义!因为我话多!问题是:如何引用 Class<IAnInterface>
的等价物?打字稿有可能吗?
我假设您正在尝试映射到 class 本身,而不是映射到 class 的实例。所以基本上有的东西是可以构造的。我认为这种类型应该适合你:
type Class<I, Args extends any[] = any[]> = new(...args: Args) => I;
我们声明可以使用 new
关键字和一些参数调用 Class<IAnInterface>
,并且 return 一个 IAnInterface
对象(class实例)。
第二个参数 Args
允许您定义构造函数参数是什么。如果没有参数,它将是一个空数组。
declare const MyClass: Class<IAnInterface, []>;
const instance: IAnInterface = new MyClass();
declare const OtherClass: Class<IAnInterface, [number, string]>;
const otherInstance: IAnInterface = new OtherClass(0, "");
(仅限 Angular)
Angular 在 class 中有一个构建:Type。
您可以在