Rsbuild supports TypeScript by default, allowing you to directly use .ts and .tsx files in your project.
Rsbuild uses SWC by default for transforming TypeScript code to JavaScript, and also supports switching to Babel for transformation.
Unlike the native TypeScript compiler, tools like SWC and Babel compile each file separately and cannot determine whether an imported name is a type or value. When using TypeScript in Rsbuild, enable the verbatimModuleSyntax or isolatedModules option in your tsconfig.json:
verbatimModuleSyntax option, which enables the isolatedModules option by default:isolatedModules option:The isolatedModules option prevents syntax that SWC and Babel cannot compile correctly, such as cross-file type references. It guides you toward correct usage:
See SWC - Migrating from tsc for more details about the differences between SWC and tsc.
@rsbuild/core provides preset type definitions, including CSS files, CSS Modules, static assets, import.meta, and other types.
Create a src/env.d.ts file to reference these types:
See types.d.ts for the complete preset type definitions that Rsbuild includes.
When transpiling TypeScript code using tools like SWC and Babel, type checking is not performed.
To enable type checking, you can use the @rsbuild/plugin-type-check plugin. This plugin runs TypeScript type checking in a separate process and internally integrates ts-checker-rspack-plugin.
The plugin supports type checking in both dev and build modes, helping you catch type errors early during development.
Refer to @rsbuild/plugin-type-check for usage instructions.
You can also use tsc directly for type checking by adding a type-check step to your build script. This approach only performs type checking after the build and does not run during dev mode.
For Vue applications, use vue-tsc instead of tsc. It supports Vue SFCs in addition to TypeScript files.
Rsbuild reads the tsconfig.json file from the root directory by default. Use source.tsconfigPath to configure a custom tsconfig.json file path.
When importing another module in a TypeScript module, TypeScript allows using the .js file extension:
Rsbuild supports this feature through Rspack's extensionAlias configuration. In TypeScript projects, Rsbuild adds the following configuration by default:
This means:
.js extension to import .ts or .tsx files..jsx extension to import .tsx files.Rsbuild does not read the experimentalDecorators option in tsconfig.json, instead, it provides the decorators.version configuration to specify the decorator version.
By default, Rsbuild uses the 2022-03 version of the decorators, you can also set it to legacy to use the legacy decorators: