diff --git a/packages/language-core/lib/codegen/script/styleModulesType.ts b/packages/language-core/lib/codegen/script/styleModulesType.ts index 493ad36ccd..2d5136517f 100644 --- a/packages/language-core/lib/codegen/script/styleModulesType.ts +++ b/packages/language-core/lib/codegen/script/styleModulesType.ts @@ -20,13 +20,17 @@ export function* generateStyleModulesType( name, 'main', offset + 1, - codeFeatures.all + codeFeatures.navigation ]; } else { yield name; } - yield `: Record & ${ctx.localTypes.PrettifyLocal}<{}`; + yield `: `; + if (!options.vueCompilerOptions.strictCssModules) { + yield `Record & `; + } + yield `${ctx.localTypes.PrettifyLocal}<{}`; for (const className of style.classNames) { yield* generateCssClassProperty( i, diff --git a/packages/language-core/lib/types.ts b/packages/language-core/lib/types.ts index 0a9ea03d88..8c4d0cef8f 100644 --- a/packages/language-core/lib/types.ts +++ b/packages/language-core/lib/types.ts @@ -32,6 +32,7 @@ export interface VueCompilerOptions { checkUnknownProps: boolean; checkUnknownEvents: boolean; checkUnknownComponents: boolean; + strictCssModules: boolean; skipTemplateCodegen: boolean; fallthroughAttributes: boolean; dataAttributes: string[]; diff --git a/packages/language-core/lib/utils/ts.ts b/packages/language-core/lib/utils/ts.ts index d8605b0f75..5091dfa5a5 100644 --- a/packages/language-core/lib/utils/ts.ts +++ b/packages/language-core/lib/utils/ts.ts @@ -265,6 +265,7 @@ export function getDefaultCompilerOptions(target = 99, lib = 'vue', strictTempla checkUnknownProps: strictTemplates, checkUnknownEvents: strictTemplates, checkUnknownComponents: strictTemplates, + strictCssModules: false, skipTemplateCodegen: false, fallthroughAttributes: false, dataAttributes: [], diff --git a/packages/language-core/schemas/vue-tsconfig.schema.json b/packages/language-core/schemas/vue-tsconfig.schema.json index d2f8613a01..1518475d9a 100644 --- a/packages/language-core/schemas/vue-tsconfig.schema.json +++ b/packages/language-core/schemas/vue-tsconfig.schema.json @@ -60,6 +60,11 @@ "default": false, "markdownDescription": "Check unknown components. If not set, uses the 'strictTemplates' value." }, + "strictCssModules": { + "type": "boolean", + "default": false, + "markdownDescription": "Strict CSS modules type-checking." + }, "skipTemplateCodegen": { "type": "boolean", "default": false, diff --git a/test-workspace/tsc/passedFixtures/vue3/cssModule/strict.vue b/test-workspace/tsc/passedFixtures/vue3/cssModule/strict.vue new file mode 100644 index 0000000000..886382546b --- /dev/null +++ b/test-workspace/tsc/passedFixtures/vue3/cssModule/strict.vue @@ -0,0 +1,15 @@ + + + + + \ No newline at end of file