diff --git a/packages/language-core/src/generators/script.ts b/packages/language-core/src/generators/script.ts index 72776cec2d..dc3512fd7f 100644 --- a/packages/language-core/src/generators/script.ts +++ b/packages/language-core/src/generators/script.ts @@ -827,7 +827,7 @@ declare function defineProp(value?: T | (() => T), required?: boolean, rest?: codes.push(`let __VLS_otherComponents!: NonNullable & typeof __VLS_componentsOption;\n`); codes.push(`let __VLS_own!: __VLS_SelfComponent { ${getSlotsPropertyName(vueCompilerOptions.target)}: typeof ${scriptSetupRanges?.slots?.name ?? '__VLS_slots'} })>;\n`); codes.push(`let __VLS_localComponents!: typeof __VLS_otherComponents & Omit;\n`); - codes.push(`let __VLS_components!: typeof __VLS_localComponents & __VLS_GlobalComponents & typeof __VLS_ctx;\n`); // for html completion, TS references... + codes.push(`let __VLS_components!: typeof __VLS_localComponents & Omit<__VLS_GlobalComponents, keyof typeof __VLS_ctx> & Omit;\n`); // for html completion, TS references... /* Style Scoped */ codes.push('/* Style Scoped */\n'); diff --git a/packages/language-core/src/generators/template.ts b/packages/language-core/src/generators/template.ts index f95543da24..00af39dc08 100644 --- a/packages/language-core/src/generators/template.ts +++ b/packages/language-core/src/generators/template.ts @@ -505,7 +505,7 @@ export function generate( let addedBlockCondition = false; if (branch.condition?.type === CompilerDOM.NodeTypes.SIMPLE_EXPRESSION) { - codes.push(` `); + codes.push(` (`); const beforeCodeLength = codes.length; codes.push( ...createInterpolationCode( @@ -518,6 +518,11 @@ export function generate( ), ); const afterCodeLength = codes.length; + codes.push( + ` && __VLS_components`, + ...createPropertyAccessCode(branch.condition.content), + ) + codes.push(')'); formatCodes.push( ...createFormatCode( @@ -688,14 +693,14 @@ export function generate( ); for (const componentName of getPossibleOriginalComponentName(tag)) { codes.push( - `'${componentName}' extends keyof typeof __VLS_ctx ? `, - `{ '${toCanonicalComponentName(tag)}': typeof __VLS_ctx`, + `'${componentName}' extends keyof typeof __VLS_components ? `, + `{ '${toCanonicalComponentName(tag)}': typeof __VLS_components`, ...createPropertyAccessCode(componentName), ` }: `, ); } codes.push( - `typeof __VLS_resolvedLocalAndGlobalComponents)`, + `typeof __VLS_ctx)`, ...(tagOffsets.length ? createPropertyAccessCode([ toCanonicalComponentName(tag), diff --git a/test-workspace/tsc/vue3/#3411/Comp.vue b/test-workspace/tsc/vue3/#3411/Comp.vue new file mode 100644 index 0000000000..ae022dbe8a --- /dev/null +++ b/test-workspace/tsc/vue3/#3411/Comp.vue @@ -0,0 +1,5 @@ + diff --git a/test-workspace/tsc/vue3/#3411/main.vue b/test-workspace/tsc/vue3/#3411/main.vue new file mode 100644 index 0000000000..02747981d6 --- /dev/null +++ b/test-workspace/tsc/vue3/#3411/main.vue @@ -0,0 +1,24 @@ + + +