如何在tsconfig中为单个模块使用路径?

时间:2018-11-30 08:23:31

标签: typescript tsconfig

这个问题是How to use paths in tsconfig.json?的后续问题,除了我想针对单个模块进行。

我有一个模块:

  • 它在src/functions/foo.ts中实现
  • 其内容为:

    export default interface Bar {
    }
    
  • 由其他模块使用非相对路径将其导入:

    import * as Foo from "foo"
    

编译器找不到它:

error TS2307: Cannot find module 'foo'

此tsconfig不能解决该问题...

{ "compilerOptions": { "noEmit": true, "strict": true, "module": "commonjs", "target": "es2017", "noImplicitAny": true, "moduleResolution": "node", "sourceMap": true, "outDir": "build", "baseUrl": ".", "paths": { "foo": ["src/functions/*"], "*": [ "node_modules/*" ] } }, "include": [ "./src/**/*", "./typings/**/*", "./test/**/*", "./test-integration/**/*" ] }

...但是这样做:

"paths": { "*": [ "node_modules/*", "src/functions/*" ] }


为什么paths的第一个版本不起作用---我做错了什么,我该怎么做才能确保仅在导入"src/functions/*"时才使用foo(并且不是在导入*时)?

(我在Windows上使用带有Node.js的tsc版本3.1.6)。

1 个答案:

答案 0 :(得分:2)

您正在将单词foo分配给目录src/functions/*的内容。

但是类似foo只能用于指定单个文件(模块)的确切位置,而不能使用通配符,因此,如下所示:

"paths": {
    "foo": ["src/functions/foo"],
    "*": [
        "node_modules/*"
    ]
}

您可能正在寻找的是

"paths": {
    "foo/*": ["src/functions/*"],
    "*": [
        "node_modules/*"
    ]
}

({foo/*而不是foo