跳到主要内容
版本:Canary 🚧

TypeScript 支持

Docusaurus 由 TypeScript 写成,并提供一流的 TypeScript 支持。

所需的最低版本是 TypeScript 5.1

初始化

Docusaurus 支持编写和使用 TypeScript 主题组件。 如果初始化模板提供了 TypeScript 变种,你可以用 --typescript 选项直接初始化一个包含完整 TypeScript 支持的网站。

npx create-docusaurus@latest my-website classic --typescript

下面是一些关于如何将现有项目迁移到 TypeScript 的指南。

设置

将下列软件包添加到您的项目:

npm install --save-dev typescript @docusaurus/module-type-aliases @docusaurus/tsconfig @docusaurus/types

随后在你的项目根目录的 tsconfig.json 中添加如下内容:

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):

src/types.d.ts
/// <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:

tsconfig.json
{
"extends": "@docusaurus/tsconfig",
"compilerOptions": {
"baseUrl": ".",
"types": ["@docusaurus/theme-live-codeblock"]
}
}

The same applies to any other optional plugin or theme that ships ambient types.

为配置文件添加类型

可以在 Docusaurus 中使用 TypeScript 配置文件。

docusaurus.config.ts
import type {Config} from '@docusaurus/types';
import type * as Preset from '@docusaurus/preset-classic';

const config: Config = {
title: 'My Site',
favicon: 'img/favicon.ico',

/* 你的站点配置 */

presets: [
[
'classic',
{
/* 你的预设配置 */
} satisfies Preset.Options,
],
],

themeConfig: {
/* 你的主题配置 */
} satisfies Preset.ThemeConfig,
};

export default config;
也可以在 .js 文件中使用 JSDoc 类型注释

默认情况下,Docusaurus TypeScript 配置不会对 JavaScript 文件进行类型检查。

// @ts-check 注释会确保在运行 npx tsc 时,配置文件可以被类型检查。

docusaurus.config.js
// @ts-check

/** @type {import('@docusaurus/types').Config} */
const config = {
tagline: 'Dinosaurs are cool',
favicon: 'img/favicon.ico',

/* 你的站点配置 */

presets: [
[
'@docusaurus/preset-classic',
/** @type {import('@docusaurus/preset-classic').Options} */
(
{
/* 你的预设配置 */
}
),
],
],
themeConfig:
/** @type {import('@docusaurus/preset-classic').ThemeConfig} */
(
{
/* 你的主题配置 */
}
),
};

export default config;
提示

类型注解非常有用,它能够帮助你的编辑器理解配置对象的类型!

最好的 IDE(VS Code,WebStorm,IntellliJ……) 会提供一个非常棒的自动补全体验。

Swizzle TypeScript 主题组件

对于支持 TypeScript 的主题组件,你可以在 swizzle 命令末尾添加 --typescript 参数,以获取 TypeScript 源码。 举个例子,下列代码会在 src/theme/Footer 中生成 index.tsxstyles.module.css

npm run swizzle @docusaurus/theme-classic Footer -- --typescript

所有官方 Docusaurus 主题都支持 TypeScript 主题组件,包括 theme-classictheme-live-codeblocktheme-search-algolia。 如果你作为 Docusaurus 主题包作者想要添加 TypeScript 支持,请参考生命周期 API 文档