Reputation: 56113
This question is a follow-on from How to use paths in tsconfig.json? except I want to do it for a single module.
I have a module:
src/functions/foo.ts
Its contents are:
export default interface Bar {
}
It's imported by another module elsewhere using a non-relative path:
import * as Foo from "foo"
The compiler doesn't find it:
error TS2307: Cannot find module 'foo'
This tsconfig doesn't fix that problem ...
{
"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/**/*"
]
}
... but this does:
"paths": {
"*": [
"node_modules/*",
"src/functions/*"
]
}
Why didn't the first version of paths
work --- what was I doing wrong, what can I do to ensure that "src/functions/*"
is used only when importing foo
(and not when importing *
)?
(I'm using tsc version 3.1.6 on Windows with Node.js).
Upvotes: 2
Views: 7016
Reputation: 1056
You are assigning a word foo
to the content of a directory src/functions/*
.
But foo
like that can only be used to specify the exact location of a single file (module), without a wildcard, so, like this:
"paths": {
"foo": ["src/functions/foo"],
"*": [
"node_modules/*"
]
}
What you are probably looking for is
"paths": {
"foo/*": ["src/functions/*"],
"*": [
"node_modules/*"
]
}
(foo/*
instead of foo
)
Upvotes: 4