diff --git a/packages/vue-language-core/src/generators/script.ts b/packages/vue-language-core/src/generators/script.ts index 09ab22aa2..3a195b300 100644 --- a/packages/vue-language-core/src/generators/script.ts +++ b/packages/vue-language-core/src/generators/script.ts @@ -156,7 +156,7 @@ export function generate( ); } if (usedHelperTypes.ToTemplateSlots) { - codes.push(`type __VLS_ToTemplateSlots = { [K in keyof T]: NonNullable extends (...args: any[]) => any ? T[K] : (props: T[K]) => any };\n`); + 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`); diff --git a/packages/vue-test-workspace/vue-tsc/#2758/app.vue b/packages/vue-test-workspace/vue-tsc/#2758/app.vue new file mode 100644 index 000000000..37e608d16 --- /dev/null +++ b/packages/vue-test-workspace/vue-tsc/#2758/app.vue @@ -0,0 +1,10 @@ + diff --git a/packages/vue-test-workspace/vue-tsc/components/main.vue b/packages/vue-test-workspace/vue-tsc/components/main.vue index 2dc1c376e..ab380a3c6 100644 --- a/packages/vue-test-workspace/vue-tsc/components/main.vue +++ b/packages/vue-test-workspace/vue-tsc/components/main.vue @@ -67,9 +67,9 @@ declare const ScriptSetupGenericExact: ( _props: NonNullable['props'] & import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps, _ctx?: Pick, 'attrs' | 'emit' | 'slots'>, _setup?: { - props: { foo: T } & { [K in keyof JSX.ElementChildrenAttribute]?: { default(data: T): any } }, + props: { foo: T } & { [K in keyof JSX.ElementChildrenAttribute]?: { default?(data: T): any } }, attrs: any, - slots: { default(data: T): any }, + slots: { default?(data: T): any }, emit: { (e: 'bar', data: T): void }, expose(_exposed: { baz: T }): void, } @@ -83,7 +83,7 @@ exactType(ScriptSetupGeneric, ScriptSetupGenericExact); exactType((new ShortDefineSlots()).$slots.foo, {} as ((props: { id: string; } | undefined) => any) | undefined); -exactType((new ShortDefineSlots()).$slots.bar, {} as (props: { +exactType((new ShortDefineSlots()).$slots.bar, {} as ((props: { id: number; -}) => any); +}) => any) | undefined);