From 2f9a0209cbd02eb24fc0cd5664bbd94de8d39a38 Mon Sep 17 00:00:00 2001 From: KazariEX <1364035137@qq.com> Date: Tue, 11 Feb 2025 22:31:08 +0800 Subject: [PATCH] fix: add `undefined` to first param type of optional model emits --- .../lib/codegen/script/scriptSetup.ts | 3 +++ .../vue3.4/defineModel/main.vue | 20 +++++++++---------- .../passedFixtures/vue3/defineModel/main.vue | 20 +++++++++---------- 3 files changed, 23 insertions(+), 20 deletions(-) diff --git a/packages/language-core/lib/codegen/script/scriptSetup.ts b/packages/language-core/lib/codegen/script/scriptSetup.ts index 81eac14a19..47961d09c9 100644 --- a/packages/language-core/lib/codegen/script/scriptSetup.ts +++ b/packages/language-core/lib/codegen/script/scriptSetup.ts @@ -524,6 +524,9 @@ function* generateModelEmit( const [propName, localName] = getPropAndLocalName(scriptSetup, defineModel); yield `'update:${propName}': [value: `; yield* generateDefinePropType(scriptSetup, propName, localName, defineModel); + if (!defineModel.required) { + yield ` | undefined`; + } yield `]${endOfLine}`; } yield `}${endOfLine}`; diff --git a/test-workspace/tsc/passedFixtures/vue3.4/defineModel/main.vue b/test-workspace/tsc/passedFixtures/vue3.4/defineModel/main.vue index ff0c0be2f1..a1b3d02e34 100644 --- a/test-workspace/tsc/passedFixtures/vue3.4/defineModel/main.vue +++ b/test-workspace/tsc/passedFixtures/vue3.4/defineModel/main.vue @@ -13,12 +13,12 @@ const ScriptSetupExact = defineComponent({ g: PropType; }, emits: {} as { - "update:modelValue": (_:string) => void - "update:c": (_:number) => void - "update:d": (_:number) => void - "update:e": (_:string) => void - "update:f": (_:string) => void - "update:g": (_:string) => void + "update:modelValue": (_: string | undefined) => void + "update:c": (_: number) => void + "update:d": (_: number | undefined) => void + "update:e": (_: string | undefined) => void + "update:f": (_: string) => void + "update:g": (_: string | undefined) => void }, setup() { return {}; @@ -32,11 +32,11 @@ exactType(ScriptSetup, ScriptSetupExact); diff --git a/test-workspace/tsc/passedFixtures/vue3/defineModel/main.vue b/test-workspace/tsc/passedFixtures/vue3/defineModel/main.vue index d1f2c600ba..749963ce8c 100644 --- a/test-workspace/tsc/passedFixtures/vue3/defineModel/main.vue +++ b/test-workspace/tsc/passedFixtures/vue3/defineModel/main.vue @@ -13,12 +13,12 @@ const ScriptSetupExact = defineComponent({ 'g'?: string, }, __typeEmits: {} as { - 'update:modelValue': [modelValue:string]; - 'update:c': [c:number]; - 'update:d': [d:number]; - 'update:e': [e:string]; - 'update:f': [f:string]; - 'update:g': [g:string]; + 'update:modelValue': [modelValue: string | undefined]; + 'update:c': [c: number]; + 'update:d': [d: number | undefined]; + 'update:e': [e: string]; + 'update:f': [f: string | undefined]; + 'update:g': [g: string | undefined]; }, setup() { return {}; @@ -32,11 +32,11 @@ exactType(ScriptSetup, ScriptSetupExact);