strict-css-modules.md
1.62 KB
title: Enable Strict CSS Modules Type Checking
impact: MEDIUM
impactDescription: catches typos in CSS module class names at compile time
type: capability
tags: strictCssModules, vueCompilerOptions, css-modules, style-module
Enable Strict CSS Modules Type Checking
Impact: MEDIUM - catches typos in CSS module class names at compile time
When using CSS modules with <style module>, Vue doesn't validate class names by default. Enable strictCssModules to catch typos and undefined classes.
Problem
CSS module class name errors go undetected:
<script setup lang="ts">
// No error for typo in class name
</script>
<template>
<div :class="$style.buttn">Click me</div>
</template>
<style module>
.button {
background: blue;
}
</style>
The typo buttn instead of button silently fails at runtime.
Solution
Enable strictCssModules in your tsconfig:
// tsconfig.json or tsconfig.app.json
{
"vueCompilerOptions": {
"strictCssModules": true
}
}
Now $style.buttn will show a type error because buttn doesn't exist in the CSS module.
What Gets Checked
| Access | With strictCssModules |
|---|---|
$style.validClass |
OK |
$style.typo |
Error: Property 'typo' does not exist |
$style['dynamic'] |
OK (dynamic access not checked) |
Limitations
- Only checks static property access (
$style.className) - Dynamic access (
$style[variable]) is not validated - Only works with
<style module>, not external CSS files