diff --git a/packages/language-core/lib/codegen/globalTypes.ts b/packages/language-core/lib/codegen/globalTypes.ts index 1d63ae4b7b..089529bd95 100644 --- a/packages/language-core/lib/codegen/globalTypes.ts +++ b/packages/language-core/lib/codegen/globalTypes.ts @@ -32,7 +32,7 @@ export function generateGlobalTypes(options: VueCompilerOptions) { ? `import('${lib}/jsx-runtime').JSX.IntrinsicElements` : `globalThis.JSX.IntrinsicElements` }; - + var __VLS_CheckUnknownProps: ${checkUnknownProps ? '{}' : 'Record'}; type __VLS_Elements = __VLS_SpreadMerge; type __VLS_GlobalComponents = ${ target >= 3.5 diff --git a/packages/language-core/lib/codegen/script/scriptSetup.ts b/packages/language-core/lib/codegen/script/scriptSetup.ts index 0567ef4983..6cd90c4eb4 100644 --- a/packages/language-core/lib/codegen/script/scriptSetup.ts +++ b/packages/language-core/lib/codegen/script/scriptSetup.ts @@ -97,7 +97,8 @@ export function* generateScriptSetup( + ` & import('${options.vueCompilerOptions.lib}').AllowedComponentProps` + ` & import('${options.vueCompilerOptions.lib}').ComponentCustomProps` : `globalThis.JSX.IntrinsicAttributes` - }${endOfLine}` + }${newLine}` + + ` & (typeof globalThis extends { __VLS_CheckUnknownProps: infer P } ? P : {})${endOfLine}` + ` expose: (exposed: ${ scriptSetupRanges.defineExpose ? `import('${options.vueCompilerOptions.lib}').ShallowUnwrapRef` diff --git a/packages/tsc/tests/__snapshots__/dts.spec.ts.snap b/packages/tsc/tests/__snapshots__/dts.spec.ts.snap index 3061be7155..cb77552ee8 100644 --- a/packages/tsc/tests/__snapshots__/dts.spec.ts.snap +++ b/packages/tsc/tests/__snapshots__/dts.spec.ts.snap @@ -63,7 +63,9 @@ exports[`vue-tsc-dts > Input: generic/component.vue, Output: generic/component.v }) & { "onUpdate:title"?: (value: string) => any; onBar?: (data: number) => any; - }> & import("vue").PublicProps; + }> & import("vue").PublicProps & (typeof globalThis extends { + __VLS_CheckUnknownProps: infer P; + } ? P : {}); expose: (exposed: import("vue").ShallowUnwrapRef<{ baz: number; }>) => void; @@ -94,7 +96,9 @@ exports[`vue-tsc-dts > Input: generic/custom-extension-component.cext, Output: g }) & { "onUpdate:title"?: (value: string) => any; onBar?: (data: number) => any; - }> & import("vue").PublicProps; + }> & import("vue").PublicProps & (typeof globalThis extends { + __VLS_CheckUnknownProps: infer P; + } ? P : {}); expose: (exposed: import("vue").ShallowUnwrapRef<{ baz: number; }>) => void; diff --git a/test-workspace/tsc/passedFixtures/vue3.4/components/main.vue b/test-workspace/tsc/passedFixtures/vue3.4/components/main.vue index 28dc5426ec..75b522940e 100644 --- a/test-workspace/tsc/passedFixtures/vue3.4/components/main.vue +++ b/test-workspace/tsc/passedFixtures/vue3.4/components/main.vue @@ -64,7 +64,7 @@ declare const ScriptSetupGenericExact: ( props: { onBar?: ((data: T) => any) | undefined; foo: T; - } & import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps, + } & import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps & Record, attrs: any, slots: { default?: (props: T) => any; }, emit: { (e: 'bar', data: T): void; }, diff --git a/test-workspace/tsc/passedFixtures/vue3/#4972/GenericComp.vue b/test-workspace/tsc/passedFixtures/vue3/#4972/GenericComp.vue new file mode 100644 index 0000000000..89e8a932ce --- /dev/null +++ b/test-workspace/tsc/passedFixtures/vue3/#4972/GenericComp.vue @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/test-workspace/tsc/passedFixtures/vue3/#4972/main.vue b/test-workspace/tsc/passedFixtures/vue3/#4972/main.vue new file mode 100644 index 0000000000..85f97bb31b --- /dev/null +++ b/test-workspace/tsc/passedFixtures/vue3/#4972/main.vue @@ -0,0 +1,13 @@ + + + diff --git a/test-workspace/tsc/passedFixtures/vue3/components/main.vue b/test-workspace/tsc/passedFixtures/vue3/components/main.vue index 9da3e4898b..476d1ad224 100644 --- a/test-workspace/tsc/passedFixtures/vue3/components/main.vue +++ b/test-workspace/tsc/passedFixtures/vue3/components/main.vue @@ -59,7 +59,7 @@ declare const ScriptSetupGenericExact: ( props: { onBar?: ((data: T) => any) | undefined; foo: T; - } & import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps, + } & import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps & Record, attrs: any, slots: { default?: (props: T) => any; }, emit: { (e: 'bar', data: T): void; },