From d2de29a4a1a8dc4bbeae9ead43baf9331a6064c7 Mon Sep 17 00:00:00 2001 From: Johnson Chu Date: Tue, 31 Oct 2023 19:26:07 +0800 Subject: [PATCH] refactor(component-type-helpers): move vue 2 type close #3404 --- packages/component-meta/src/base.ts | 5 +++-- packages/component-type-helpers/index.d.ts | 9 --------- packages/component-type-helpers/index.js | 2 ++ packages/component-type-helpers/vue2.js | 8 ++++++++ packages/component-type-helpers/vue2.ts | 15 +++++++++++++++ 5 files changed, 28 insertions(+), 11 deletions(-) create mode 100644 packages/component-type-helpers/vue2.js create mode 100644 packages/component-type-helpers/vue2.ts diff --git a/packages/component-meta/src/base.ts b/packages/component-meta/src/base.ts index c05494f4a9..c2ab232db9 100644 --- a/packages/component-meta/src/base.ts +++ b/packages/component-meta/src/base.ts @@ -2,6 +2,7 @@ import * as vue from '@vue/language-core'; import type * as ts from 'typescript/lib/tsserverlibrary'; import * as path from 'path-browserify'; import { code as typeHelpersCode } from 'vue-component-type-helpers'; +import { code as vue2TypeHelpersCode } from 'vue-component-type-helpers/vue2'; import { createLanguageServiceHost, decorateLanguageService } from '@volar/typescript'; import type { @@ -201,11 +202,11 @@ interface ComponentMeta { type: ComponentType; props: ComponentProps; emit: ComponentEmit; - slots: ${vueCompilerOptions.target < 3 ? 'Vue2ComponentSlots' : 'ComponentSlots'}; + slots: ComponentSlots; exposed: ComponentExposed; }; -${typeHelpersCode} +${vueCompilerOptions.target < 3 ? vue2TypeHelpersCode : typeHelpersCode} `.trim(); return code; } diff --git a/packages/component-type-helpers/index.d.ts b/packages/component-type-helpers/index.d.ts index de0c51a46b..0ce45dcf0d 100644 --- a/packages/component-type-helpers/index.d.ts +++ b/packages/component-type-helpers/index.d.ts @@ -26,12 +26,3 @@ export type ComponentExposed = T extends new () => infer E ? E : T extends (props: any, ctx: any, expose: (exposed: infer E) => any, ...args: any) => any ? NonNullable : {}; - -/** - * Vue 2.x - */ - -export type Vue2ComponentSlots = - T extends new () => { $scopedSlots: infer S; } ? NonNullable : - T extends (props: any, ctx: { slots: infer S; }, ...args: any) => any ? NonNullable : - {}; diff --git a/packages/component-type-helpers/index.js b/packages/component-type-helpers/index.js index e13c9538dc..49123c5d9c 100644 --- a/packages/component-type-helpers/index.js +++ b/packages/component-type-helpers/index.js @@ -1,3 +1,5 @@ +// @ts-check + const code = ` export type ComponentType = T extends new () => {} ? 1 : diff --git a/packages/component-type-helpers/vue2.js b/packages/component-type-helpers/vue2.js new file mode 100644 index 0000000000..af5dbe26d2 --- /dev/null +++ b/packages/component-type-helpers/vue2.js @@ -0,0 +1,8 @@ +// @ts-check + +const code = require('./index') + .code + .replace('$slots', '$scopedSlots'); + +exports.code = code; +exports.default = code; diff --git a/packages/component-type-helpers/vue2.ts b/packages/component-type-helpers/vue2.ts new file mode 100644 index 0000000000..9f70a72fea --- /dev/null +++ b/packages/component-type-helpers/vue2.ts @@ -0,0 +1,15 @@ +export declare const code: string; + +export default code; + +export { + ComponentType, + ComponentProps, + ComponentEmit, + ComponentExposed, +} from './index'; + +export type ComponentSlots = + T extends new () => { $scopedSlots: infer S; } ? NonNullable : + T extends (props: any, ctx: { slots: infer S; }, ...args: any) => any ? NonNullable : + {};