diff --git a/src/core/declaration.ts b/src/core/declaration.ts index c3f67786..de3d61ac 100644 --- a/src/core/declaration.ts +++ b/src/core/declaration.ts @@ -142,6 +142,17 @@ ${head}` }` } code += '\n}\n' + + if (ctx.options.instanceType) { + if (Object.keys(declarations.component).length > 0) { + const instanceTypes = declarations.component.map(str => `type ${str.replace(': typeof import', 'Instance = InstanceType<typeof import')}>`) + code += ` +declare global { + ${instanceTypes.join('\n ')} +}\n` + } + } + return code } diff --git a/src/types.ts b/src/types.ts index f8d52c0e..21d091d0 100644 --- a/src/types.ts +++ b/src/types.ts @@ -149,6 +149,12 @@ export interface Options { */ dts?: boolean | string + /** + * Generate TypeScript declaration for components InstanceType. + * @default false + */ + instanceType?: boolean + /** * Do not emit warning on component overriding *