跳到主要内容

声明文件与模块解析

类型可以来自你的 .ts,也可以来自 .d.ts 或 DefinitelyTyped(@types/*)。

.d.ts 是什么​

声明文件只描述类型,不发射运行时代码:

// shim.d.ts
declare module "legacy-lib" {
export function doStuff(x: string): number;
}

给无类型的 JS 库补类型,或为资源模块声明:

declare module "*.css" {
const classes: Record<string, string>;
export default classes;
}

@types​

npm install -D @types/node

许多库自带类型(package.json 的 types/typings);没有时再装 @types/包名。

模块解析直觉​

tsconfig 中:

  • moduleResolution: 现代项目常用 bundler 或 NodeNext
  • paths: 路径别名(需与打包器/运行时配置对齐,否则运行期找不到)
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@/*": ["src/*"]
}
}
}

别名是编译期映射;Vite/Webpack/Node 加载器还要各自配置。

要点​

  1. .d.ts 描述形状,不生成 JS
  2. 优先用库自带类型,其次 @types
  3. paths 必须与构建工具一致
  4. 为裸 JS 模块写最小 declare module