如何使 TypeScript 路径映射在生产代码中有用?

How to make the TypeScript path maps useful in the production code?

我一直在处理我的 TypeScript 项目,想解决相对导入 ../../../ 地狱般的问题。我发现在 tsconfig.json 中我可以指定 baseUrlpaths 字段,这样当我将这样的片段添加到tsconfig.json:

    "baseUrl": ".",
    "paths": {
      "@interface" : ["src/interface"],
    },

效果很好……有一段时间了。我用较短的版本交换了导入语句中的长路径。 VSCode 很友好地理解了路径映射和编码变得更容易。当我最终想测试该应用程序时,我使用 tsc 命令编译了代码。当我想 运行 它时,我得到了错误:

Error: Cannot find module '@interface'

我检查了输出 JavaScript 代码,发现导入中的路径没有像我预期的那样被编译器交换,但它只是以与 .ts 文件:

const _interface_1 = require("@interface");

我发现 an issue on TS GitHub from August 2018 问的是完全相同的事情。直到现在还没有一个令人满意的解决方案。

我的问题是:TypeScript 中路径映射的用例是什么 as described in the manual?如果它们最终使生产代码无法 运行nable,那么使用它们有什么意义?

我也同意 Aviad 发表的评论,但没有做出判断。如果你必须这样做,那么这里有一个方法:

将模块 module-alias 添加到您的依赖项中。然后也将映射添加到 package.json:

"_moduleAliases": {
    "@interface": "dist/interface", // note its referencing dist folder
},

然后在你的主ts文件中。例如index.ts,使用import "module-alias/register";

注册模块别名

Here you can read more about it