对 TypeScript 的支持
由于 Docusaurus 是使用 TypeScript 开发的,因此完全支持 TypeScript。
The minimum required version is TypeScript 5.1.
初始化
Docusaurus supports writing and using TypeScript theme components. If the init template provides a TypeScript variant, you can directly initialize a site with full TypeScript support by using the --typescript flag.
- npm
- Yarn
- pnpm
- Bun
npx create-docusaurus@latest my-website classic --typescript
yarn dlx create-docusaurus@latest my-website classic --typescript
pnpm dlx create-docusaurus@latest my-website classic --typescript
bun x create-docusaurus@latest my-website classic --typescript
以下是一些关于如何将现有项目迁移到 TypeScript 的指南。
安装设置
Add the following packages to your project:
- npm
- Yarn
- pnpm
- Bun
npm install --save-dev typescript @docusaurus/module-type-aliases @docusaurus/tsconfig @docusaurus/types
yarn add --dev typescript @docusaurus/module-type-aliases @docusaurus/tsconfig @docusaurus/types
pnpm add --save-dev typescript @docusaurus/module-type-aliases @docusaurus/tsconfig @docusaurus/types
bun add --dev typescript @docusaurus/module-type-aliases @docusaurus/tsconfig @docusaurus/types
然后在项目的根目录下添加 tsconfig.json 文件,此文件包含的内容如下:
{
"extends": "@docusaurus/tsconfig",
"compilerOptions": {
"baseUrl": "."
}
}
Docusaurus 在编译您的项目时并不会用到 tsconfig.json 文件。添加此文件的目的只是为了获得更好的编辑器体验(虽然您可以通过手工或在 CI 上运行 tsc 来对你的代码进行类型检查)。
现在就可以用 TypeScript 来编写主题组件了。
Ambient types for optional plugins
Some plugins and themes ship their own ambient .d.ts files that TypeScript does not load automatically.
For example, importing from @theme/Playground (provided by @docusaurus/theme-live-codeblock) fails with TS2307: Cannot find module '@theme/Playground' until you opt the plugin's types in.
Add a triple-slash reference in a project .d.ts file (recommended):
/// <reference types="@docusaurus/theme-live-codeblock" />
Alternatively, add the package to the types compiler option of your tsconfig.json. This disables TypeScript's default loading of @types/* packages, so include any other type packages you rely on explicitly:
{
"extends": "@docusaurus/tsconfig",
"compilerOptions": {
"baseUrl": ".",
"types": ["@docusaurus/theme-live-codeblock"]
}
}
The same applies to any other optional plugin or theme that ships ambient types.
Typing the config file
It is possible to use a TypeScript config file in Docusaurus.
import type {Config} from '@docusaurus/types';
import type * as Preset from '@docusaurus/preset-classic';
const config: Config = {
title: 'My Site',
favicon: 'img/favicon.ico',
/* Your site config here */
presets: [
[
'classic',
{
/* Your preset config here */
} satisfies Preset.Options,
],
],
themeConfig: {
/* Your theme config here */
} satisfies Preset.ThemeConfig,
};
export default config;
It is also possible to use JSDoc type annotations within a .js file:
By default, the Docusaurus TypeScript config does not type-check JavaScript files.
The // @ts-check comment ensures the config file is properly type-checked when running npx tsc.
// @ts-check
/** @type {import('@docusaurus/types').Config} */
const config = {
tagline: 'Dinosaurs are cool',
favicon: 'img/favicon.ico',
/* Your site config here */
presets: [
[
'@docusaurus/preset-classic',
/** @type {import('@docusaurus/preset-classic').Options} */
(
{
/* Your preset config here */
}
),
],
],
themeConfig:
/** @type {import('@docusaurus/preset-classic').ThemeConfig} */
(
{
/* Your theme config here */
}
),
};
export default config;
类型注释(Type annotations)非常有用,可以帮助 IDE 理解配置对象(config objects)的类型!
优秀的 IDE(例如 VS Code、WebStorm、IntelliJ 等)都提供了良好的自动完成功能。
覆盖 TypeScript 编写的主题组件
对于支持 TypeScript 主题组件的主题,你可以在 swizzle 命令的末尾添加 --typescript 参数来获取该组件的 TypeScript 源码。例如,以下命令将在 src/theme/Footer 目录下生成 index.tsx 和 styles.module.css 两个文件。
- npm
- Yarn
- pnpm
- Bun
npm run swizzle @docusaurus/theme-classic Footer -- --typescript
yarn swizzle @docusaurus/theme-classic Footer --typescript
pnpm run swizzle @docusaurus/theme-classic Footer --typescript
bun run swizzle @docusaurus/theme-classic Footer --typescript
Docusaurus 官方提供的所有主题都支持 TypeScript 主题组件,包括 theme-classic, theme-live-codeblock 和theme-search-algolia。如果你是一个 Docusaurus 主题作者,想要添加对 TypeScript 的支持的话,请参阅 声明周期 API 文档。