如何获得和使用类的构造选项类型?

时间:2019-06-21 22:06:26

标签: typescript

我正在构建一个React组件库,希望组件的可能道具与第3方类型定义中定义的类的构造选项相匹配。

例如,这里有一个Annotation类:https://github.com/wsmd/mapkit-typescript/blob/master/mapkit/mapkit.Annotation.d.ts#L9

,我想从这里获取构造选项:https://github.com/wsmd/mapkit-typescript/blob/master/mapkit/mapkit.Annotation.d.ts#L160以在我的组件中使用。

我目前的假设是,如果不导出接口,这是不可能的,但是也许我错了?

1 个答案:

答案 0 :(得分:1)

您可以使用一些通用类型魔术来获得该类型。

给定类类型(使用某些参数实现new的类)时,该类型将引用所有构造函数元素的数组。

type ConstructorParameters<T> = T extends new(... args: infer U) => any ? U : never; 

它是这样使用的:

type AnnotationParams = ConstructorParameters<typeof Annotation>;

然后您可以像这样获得所需的特定参数类型(索引2):

// Note that since the parameter is optional, we use the builtin NonNullable around it to remove the `| undefined` part
type AnnotationConstructorParameters = NonNullable<AnnotationParams[2]>;