Skip to content

Commit

Permalink
refactor(component-type-helpers): move vue 2 type
Browse files Browse the repository at this point in the history
close #3404
  • Loading branch information
johnsoncodehk committed Oct 31, 2023
1 parent fd38ed0 commit d2de29a
Show file tree
Hide file tree
Showing 5 changed files with 28 additions and 11 deletions.
5 changes: 3 additions & 2 deletions packages/component-meta/src/base.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -201,11 +202,11 @@ interface ComponentMeta<T> {
type: ComponentType<T>;
props: ComponentProps<T>;
emit: ComponentEmit<T>;
slots: ${vueCompilerOptions.target < 3 ? 'Vue2ComponentSlots' : 'ComponentSlots'}<T>;
slots: ComponentSlots<T>;
exposed: ComponentExposed<T>;
};
${typeHelpersCode}
${vueCompilerOptions.target < 3 ? vue2TypeHelpersCode : typeHelpersCode}
`.trim();
return code;
}
Expand Down
9 changes: 0 additions & 9 deletions packages/component-type-helpers/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,3 @@ export type ComponentExposed<T> =
T extends new () => infer E ? E :
T extends (props: any, ctx: any, expose: (exposed: infer E) => any, ...args: any) => any ? NonNullable<E> :
{};

/**
* Vue 2.x
*/

export type Vue2ComponentSlots<T> =
T extends new () => { $scopedSlots: infer S; } ? NonNullable<S> :
T extends (props: any, ctx: { slots: infer S; }, ...args: any) => any ? NonNullable<S> :
{};
2 changes: 2 additions & 0 deletions packages/component-type-helpers/index.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// @ts-check

const code = `
export type ComponentType<T> =
T extends new () => {} ? 1 :
Expand Down
8 changes: 8 additions & 0 deletions packages/component-type-helpers/vue2.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
// @ts-check

const code = require('./index')
.code
.replace('$slots', '$scopedSlots');

exports.code = code;
exports.default = code;
15 changes: 15 additions & 0 deletions packages/component-type-helpers/vue2.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
export declare const code: string;

export default code;

export {
ComponentType,
ComponentProps,
ComponentEmit,
ComponentExposed,
} from './index';

export type ComponentSlots<T> =
T extends new () => { $scopedSlots: infer S; } ? NonNullable<S> :
T extends (props: any, ctx: { slots: infer S; }, ...args: any) => any ? NonNullable<S> :
{};

0 comments on commit d2de29a

Please sign in to comment.