网站搜索

别名 - TypeScript 路径别名在项目引用中停止工作


之前,我遇到了一个关于 package.json 不在 rootDir 下的问题,但后来,我在 StackOverflow 上找到了一个针对完全相同问题的提问,在按照这个答案建议的步骤操作后,当我尝试通过运行 tsc --build src 生成声明文件时,我的路径别名未被 tsc 识别

注意:我没有在 tsconfig.json 中包括与声明相关的属性,比如 "declaration": true 或 "emitDeclarationOnly": true,因为我起初甚至无法转译代码,而且我专注于让路径别名生效,因为它们似乎是一个比 .d.ts 生成更复杂且独立的问题,如果这成为问题,我之后会在同一个问题的评论中补充。

文件结构:

.
├── src/
│   ├── helpers/
│   │   └── parseOptions.ts
│   ├── eswatch.ts
│   └── tsconfig.json
├── package.json
└── tsconfig.json

./tsconfig.json

{
  "compilerOptions": {
    "rootDir": ".",
    "outDir": ".",
    "resolveJsonModule": true,
    "composite": true,
  },
  "files": ["package.json"],
}

./src/tsconfig.json

{
  "compilerOptions": {
    "rootDir": ".",
    "outDir": "../types",
    "resolveJsonModule": true
  },
  "paths": {
    "@eswatch/*": ["./*"]
  },
  "references": [
    { "path": "../" }
  ]
}

当与项目引用一起使用时,路径别名根本无法被识别,理想情况下,它们应像平常一样工作,因此,声明文件应该被生成

答案#1

解决了!结果发现是一个非常愚蠢的错误,不知怎么没被发现,tsconfig.json 的 paths 属性应该放在 compilerOptions 内,而不是在对象根级别,下面的配置对我有效:

{
  "compilerOptions": {
    "rootDir": ".",
    "outDir": "../types",
    "resolveJsonModule": true,
    "paths": {
       "@eswatch/*": ["./*"]
     }
  },
  "references": [
    { "path": "../" }
  ]
}