From c5c025c33e6aa6bf1634e4bf2e24cdaf37ea1188 Mon Sep 17 00:00:00 2001 From: Johnson Chu Date: Thu, 4 May 2023 07:17:42 +0800 Subject: [PATCH] Drop support for Vue 3.3 slots short definition (#3116) --- .../src/generators/script.ts | 24 +++++++------------ .../vue-test-workspace/vue-tsc/#2726/main.vue | 4 ++-- .../vue-test-workspace/vue-tsc/#2758/main.vue | 4 ++-- .../vue-tsc/components/main.vue | 7 ------ .../components/script-setup-generic.vue | 2 +- .../vue-tsc/components/short-define-slots.vue | 10 -------- 6 files changed, 13 insertions(+), 38 deletions(-) delete mode 100644 packages/vue-test-workspace/vue-tsc/components/short-define-slots.vue diff --git a/packages/vue-language-core/src/generators/script.ts b/packages/vue-language-core/src/generators/script.ts index 60610e577..810c4d056 100644 --- a/packages/vue-language-core/src/generators/script.ts +++ b/packages/vue-language-core/src/generators/script.ts @@ -78,7 +78,6 @@ export function generate( mergePropDefaults: false, ConstructorOverloads: false, WithTemplateSlots: false, - ToTemplateSlots: false, PropsChildren: false, }; @@ -156,9 +155,6 @@ export function generate( `} };\n`, ); } - if (usedHelperTypes.ToTemplateSlots) { - codes.push(`type __VLS_ToTemplateSlots = { [K in keyof T]?: NonNullable extends (...args: any[]) => any ? T[K] : (props: T[K]) => any };\n`); - } if (usedHelperTypes.PropsChildren) { codes.push(`type __VLS_PropsChildren = { [K in keyof (boolean extends (JSX.ElementChildrenAttribute extends never ? true : false) ? never : JSX.ElementChildrenAttribute)]?: S; };\n`); } @@ -385,22 +381,20 @@ export function generate( codes.push(`};\n`); } if (scriptSetupRanges.slotsTypeArg && vueCompilerOptions.jsxSlots) { - usedHelperTypes.ToTemplateSlots = true; usedHelperTypes.PropsChildren = true; - codes.push(` & __VLS_PropsChildren<__VLS_ToTemplateSlots<`); + codes.push(` & __VLS_PropsChildren<`); addExtraReferenceVirtualCode('scriptSetup', scriptSetupRanges.slotsTypeArg.start, scriptSetupRanges.slotsTypeArg.end); - codes.push(`>>`); + codes.push(`>`); } codes.push(`;\n`); } else { codes.push(`const __VLS_props: {}`); if (scriptSetupRanges.slotsTypeArg && vueCompilerOptions.jsxSlots) { - usedHelperTypes.ToTemplateSlots = true; usedHelperTypes.PropsChildren = true; - codes.push(` & __VLS_PropsChildren<__VLS_ToTemplateSlots<`); + codes.push(` & __VLS_PropsChildren<`); addExtraReferenceVirtualCode('scriptSetup', scriptSetupRanges.slotsTypeArg.start, scriptSetupRanges.slotsTypeArg.end); - codes.push(`>>`); + codes.push(`>`); } if (scriptSetupRanges.propsTypeArg) { codes.push(' & '); @@ -685,10 +679,9 @@ declare function defineProp(value?: T | (() => T), required?: boolean, rest?: generateConstNameOption(); if (scriptSetupRanges?.slotsTypeArg && sfc.scriptSetup) { - usedHelperTypes.ToTemplateSlots = true; - codes.push(`var __VLS_slots!: __VLS_ToTemplateSlots<`); + codes.push(`var __VLS_slots!: `); addExtraReferenceVirtualCode('scriptSetup', scriptSetupRanges.slotsTypeArg.start, scriptSetupRanges.slotsTypeArg.end); - codes.push('>;\n'); + codes.push(';\n'); }; codes.push(`function __VLS_template() {\n`); @@ -875,10 +868,9 @@ declare function defineProp(value?: T | (() => T), required?: boolean, rest?: if (!htmlGen) { codes.push(`// no template\n`); if (scriptSetupRanges?.slotsTypeArg && sfc.scriptSetup) { - usedHelperTypes.ToTemplateSlots = true; - codes.push(`let __VLS_slots!: __VLS_ToTemplateSlots<`); + codes.push(`let __VLS_slots!: `); addExtraReferenceVirtualCode('scriptSetup', scriptSetupRanges.slotsTypeArg.start, scriptSetupRanges.slotsTypeArg.end); - codes.push(`>;\n`); + codes.push(`;\n`); } else { codes.push(`const __VLS_slots = {};\n`); diff --git a/packages/vue-test-workspace/vue-tsc/#2726/main.vue b/packages/vue-test-workspace/vue-tsc/#2726/main.vue index 5117ec08b..24b1f7752 100644 --- a/packages/vue-test-workspace/vue-tsc/#2726/main.vue +++ b/packages/vue-test-workspace/vue-tsc/#2726/main.vue @@ -6,10 +6,10 @@ import { ref } from 'vue'; const foo = ref('bar'); defineSlots<{ - default: { + default: (_: { foo: string; buz?: number; - }; + }) => any; }>(); diff --git a/packages/vue-test-workspace/vue-tsc/#2758/main.vue b/packages/vue-test-workspace/vue-tsc/#2758/main.vue index 1831ba331..2ea9ee5f2 100644 --- a/packages/vue-test-workspace/vue-tsc/#2758/main.vue +++ b/packages/vue-test-workspace/vue-tsc/#2758/main.vue @@ -12,9 +12,9 @@ diff --git a/packages/vue-test-workspace/vue-tsc/components/main.vue b/packages/vue-test-workspace/vue-tsc/components/main.vue index ab380a3c6..1673d7646 100644 --- a/packages/vue-test-workspace/vue-tsc/components/main.vue +++ b/packages/vue-test-workspace/vue-tsc/components/main.vue @@ -6,7 +6,6 @@ import ScriptSetupExpose from './script-setup-expose.vue'; import ScriptSetupTypeOnly from './script-setup-type-only.vue'; import ScriptSetupDefaultProps from './script-setup-default-props.vue'; import ScriptSetupGeneric from './script-setup-generic.vue'; -import ShortDefineSlots from './short-define-slots.vue'; // https://vuejs.org/api/sfc-script-setup.html#defineprops-defineemits const ScriptSetupExact = defineComponent({ @@ -80,10 +79,4 @@ exactType(ScriptSetupExpose, ScriptSetupExposeExact); exactType(ScriptSetupTypeOnly, ScriptSetupTypeOnlyExact); exactType(ScriptSetupDefaultProps, ScriptSetupDefaultPropsExact); exactType(ScriptSetupGeneric, ScriptSetupGenericExact); -exactType((new ShortDefineSlots()).$slots.foo, {} as ((props: { - id: string; -} | undefined) => any) | undefined); -exactType((new ShortDefineSlots()).$slots.bar, {} as ((props: { - id: number; -}) => any) | undefined); diff --git a/packages/vue-test-workspace/vue-tsc/components/script-setup-generic.vue b/packages/vue-test-workspace/vue-tsc/components/script-setup-generic.vue index a3067b0de..6d4fe6483 100644 --- a/packages/vue-test-workspace/vue-tsc/components/script-setup-generic.vue +++ b/packages/vue-test-workspace/vue-tsc/components/script-setup-generic.vue @@ -2,7 +2,7 @@ defineProps<{ foo: T }>(); defineEmits<{ (e: 'bar', data: T): void }>(); defineExpose({ baz: {} as T }); -defineSlots<{ default(data: T): any }>(); +defineSlots<{ default?(data: T): any }>(); - -