我正在构建一个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以在我的组件中使用。
我目前的假设是,如果不导出接口,这是不可能的,但是也许我错了?
答案 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]>;