typescript-plugin-css-modules
A TypeScript language service plugin
for CSS Modules.
This project was inspired by this create-react-app
issue
and was based on css-module-types
.
Usage
To install with Yarn:
yarn add typescript-plugin-css-modules
To install with npm:
npm install --save typescript-plugin-css-modules
Once installed, add this plugin to your tsconfig.json
:
{
"compilerOptions": {
"plugins": [{ "name": "typescript-plugin-css-modules" }]
}
}
Options
Option | Default value | Description |
---|
customMatcher | "\\.module\\.(sa|sc|c)ss$" | Change the file extensions that this plugin works with. |
camelCase | false | Implements the behaviour of the camelCase CSS Loader option (accepting the same values). |
The below is an example that only matches "*.m.css" files, and camel-cases dashes.
{
"compilerOptions": {
"plugins": [
{
"name": "typescript-plugin-css-modules",
"options": {
"customMatcher": "\\.m\\.css$",
"camelCase": "dashes"
}
}
]
}
}
Visual Studio Code
By default, VSCode will use it's own version of TypeScript. To make it work with this plugin, you have two options:
- Add this plugin to
"typescript.tsserver.pluginPaths"
in settings. Note that this method doesn't currently support
plugin options. This is planned for the November update.
{
"typescript.tsserver.pluginPaths": ["typescript-plugin-css-modules"]
}
- Use your workspace's version of TypeScript, which will load the plugins from your
tsconfig.json
file. For instructions, see: Using the workspace version of TypeScript.
Custom definitions
Note: Create React App users can skip this section if you're using react-scripts@2.1.x
or higher.
If your project doesn't already have global declarations for CSS Modules, you will need to add these to help TypeScript understand the general shape of the imported CSS during build.
Where you store global declarations is up to you. An example might look like: src/custom.d.ts
.
The below is an example that you can copy, or modify if you use a customMatcher
.
declare module '*.module.css' {
const classes: { [key: string]: string };
export default classes;
}
declare module '*.module.scss' {
const classes: { [key: string]: string };
export default classes;
}
declare module '*.module.sass' {
const classes: { [key: string]: string };
export default classes;
}