diff --git a/vue-language-tools/vue-language-core/src/generators/template.ts b/vue-language-tools/vue-language-core/src/generators/template.ts index c18f8becd..c3ccd2a28 100644 --- a/vue-language-tools/vue-language-core/src/generators/template.ts +++ b/vue-language-tools/vue-language-core/src/generators/template.ts @@ -47,6 +47,7 @@ const transformContext: CompilerDOM.TransformContext = { export function generate( ts: typeof import('typescript/lib/tsserverlibrary'), + compilerOptions: ts.CompilerOptions, vueCompilerOptions: ResolvedVueCompilerOptions, sourceTemplate: string, sourceLang: string, @@ -1315,14 +1316,29 @@ export function generate( ]); codeGen.push(varSlots); if (isStatic) { - writePropertyAccess( - slotName, - argRange, - { - ...capabilitiesSet.slotName, - completion: !!prop.arg, - }, - ); + // https://github.com/johnsoncodehk/volar/issues/2236 + if (!compilerOptions.noPropertyAccessFromIndexSignature) { + writePropertyAccess( + slotName, + argRange, + { + ...capabilitiesSet.slotName, + completion: !!prop.arg, + }, + ); + } + else { + codeGen.push(`[`); + writeCodeWithQuotes( + slotName, + argRange, + { + ...capabilitiesSet.slotName, + completion: !!prop.arg, + }, + ); + codeGen.push(`]`); + } } else { codeGen.push(`[`); diff --git a/vue-language-tools/vue-language-core/src/plugins/vue-tsx.ts b/vue-language-tools/vue-language-core/src/plugins/vue-tsx.ts index 32d4098eb..a96a2266b 100644 --- a/vue-language-tools/vue-language-core/src/plugins/vue-tsx.ts +++ b/vue-language-tools/vue-language-core/src/plugins/vue-tsx.ts @@ -147,6 +147,7 @@ const plugin: VueLanguagePlugin = ({ modules, vueCompilerOptions, compilerOption return templateGen.generate( ts, + compilerOptions, vueCompilerOptions, _sfc.template?.content ?? '', _sfc.template?.lang ?? 'html', diff --git a/vue-language-tools/vue-test-workspace/vue-tsc/#2236/main.vue b/vue-language-tools/vue-test-workspace/vue-tsc/#2236/main.vue new file mode 100644 index 000000000..eb6d747d5 --- /dev/null +++ b/vue-language-tools/vue-test-workspace/vue-tsc/#2236/main.vue @@ -0,0 +1,6 @@ + diff --git a/vue-language-tools/vue-test-workspace/vue-tsc/tsconfig.json b/vue-language-tools/vue-test-workspace/vue-tsc/tsconfig.json index 6476d1c96..bdd4cf318 100644 --- a/vue-language-tools/vue-test-workspace/vue-tsc/tsconfig.json +++ b/vue-language-tools/vue-test-workspace/vue-tsc/tsconfig.json @@ -1,5 +1,8 @@ { "extends": "../tsconfig.json", + "compilerOptions": { + "noPropertyAccessFromIndexSignature": true, + }, "include": [ "**/*.vue", "**/*.html",