Skip to content

三斜线指令

三斜线指令(triple-slash directives)是写在 TypeScript 文件顶部的一种特殊注释,用来给编译器提供额外信息。

它的形式通常如下:

ts
/// <reference types="vite/client" />

本质上,这不是普通注释,而是会被 TypeScript 编译器识别的一类编译指令。

作用

三斜线指令主要用于以下场景:

  • 显式引入其他声明文件
  • 为当前文件补充额外的全局类型
  • 指定需要的内置库类型
  • 控制默认标准库的引入行为

使用位置

三斜线指令通常写在文件顶部。

为了确保编译器能正确识别,通常应放在:

  • 文件最前面
  • 其他语句之前
  • 没有实际代码打断的位置
ts
/// <reference types="vite/client" />

const baseUrl = import.meta.env.BASE_URL

常见指令

/// <reference path="..." />

用于引用另一个声明文件或 TypeScript 文件。

ts
/// <reference path="./types/global.d.ts" />

这种写法更常见于旧项目或历史代码。在现代工程里,通常更推荐用模块导入、tsconfig.jsoninclude,或直接使用 .d.ts 文件参与编译。

/// <reference types="..." />

用于引入某个类型包中的全局声明,常见于 @types/* 或工具注入的全局类型。

ts
/// <reference types="node" />
/// <reference types="vite/client" />

适用场景:

  • 当前文件需要 Node.js 全局类型
  • 当前文件需要 vite/client 提供的 import.meta.env
  • 希望只在局部文件中补充某类全局类型

如果整个项目都需要这些类型,通常更适合在 tsconfig.jsoncompilerOptions.types 中统一配置。

/// <reference lib="..." />

用于为当前文件额外引入某个内置库声明。

ts
/// <reference lib="dom" />
/// <reference lib="es2023" />

例如:

  • dom 提供浏览器环境类型
  • es2023 提供对应 ECMAScript 标准库类型

这种方式适合“某个文件临时需要某类内置库类型”的情况;如果整个项目都依赖这些运行时能力,更推荐在 tsconfig.jsoncompilerOptions.lib 中统一配置。

/// <reference no-default-lib="true" />

用于告诉 TypeScript:当前声明文件不应自动引入默认标准库。

ts
/// <reference no-default-lib="true" />

这类写法多见于 TypeScript 自身的标准库声明文件或特殊的底层类型定义场景,业务项目里很少直接使用。

tsconfig.json 的关系

三斜线指令适合做“文件级”的补充。

tsconfig.json 更适合做“项目级”的统一配置。

通常优先级上的思路是:

  • 整个项目都需要:优先放进 tsconfig.json
  • 只有少量文件需要:考虑三斜线指令
  • 属于模块依赖关系:优先使用 import

现代项目里的常见用法

最常见的一种用法,是在类型入口文件中引入环境相关的全局类型。

ts
/// <reference types="vite/client" />

例如在 Vite 项目中,这样可以让 import.meta.env 获得正确类型提示。

什么时候不建议使用

以下情况通常不建议优先使用三斜线指令:

  • 模块之间的普通依赖关系
  • 整个项目统一生效的类型配置
  • 可以通过 import typetsconfig.json.d.ts 文件自然解决的问题

简单理解:

  • 三斜线指令偏“编译器补充说明”
  • import 偏“模块依赖关系”
  • tsconfig.json 偏“项目范围配置”

参阅

基于 MIT 许可发布