我试图使用bakers和tsconfigs paths
选项导入一些服务,但我无法让angular和vscode沿着。
如果它对一个人有效,对另一个人就无效,反之亦然...
我的情况似乎很简单:
- 在
src/app/services
中,我有一个导出到index.ts中的服务 - 我的
src/tsconfig.app.json
是这样的:
{
"extends": "../tsconfig.json",
"compilerOptions": {
"outDir": "../out-tsc/app",
"types": [],
"baseUrl": ".",
"paths": {
"services": ["app/services"]
}
},
"exclude": [
"test.ts",
"**/*.spec.ts"
],
}
而且我的Angular 应用程序编译时没有任何问题,但每次我尝试从'services'
导入服务时,vscode总是给我错误,给我[ts] Cannot find module 'services'.
为甚么?
我使用的是typescript 3.1.6,在vscode设置中我有"typescript.tsdk": "C:/Users/myuser/AppData/Roaming/npm/node_modules/typescript/lib"
(我也尝试保留默认设置,没有更改)
编辑:
如果我在从src
开始的./tsconfig.json
中指定paths
,则vscode是满意的,但angular不是。
如果我在tsconfig.json
和src/tsconfig.app.json
中都指定了paths
,那么vscode和angular都很满意,但对我来说这似乎是一个太愚蠢的解决方案...
8条答案
按热度按时间pbpqsu0x1#
我想明白了,即使我一直觉得这很荒谬...
VsCode会自动查找
tsconfig.json
文件,它并不关心tsconfig.app.json
,因此需要在tsconfig.json
中指定paths
。同时,angular-cli scaffolding在
tsconfig.app.json
中指定了一个baseUrl
参数,该参数覆盖了上面的参数。解决方法是删除
tsconfig.app.json
中的baseUrl
参数或将其值编辑为"../"
(As我个人的一点意见,鉴于vscode主要用于构建angular解决方案,我认为应该在angular-cli脚手架或vscode如何查找tsconfig文件中重新审视一些东西)
bxpogfeg2#
这个答案对我很有效。
1.打开 * 命令面板 * 并选择
TypeScript: select TypeScript Version ...
1.选择使用 * 工作区版本 *
希望这个答案能解决其他人面临的同样问题。
x6492ojm3#
似乎VSCode只直接检查您打开的文件夹中的
tsconfig.json
。它不会检查tsc等文件夹,也不会查看tsconfig.app.json
。因此在某些情况下,baseUrl
可能会丢失,因为VSCode根本没有读取tsconfig.json
。VSCode限制在一个固定的地方使用一个
tsconfig.json
已经有一段时间了,似乎要让它更灵活并不容易:https://github.com/microsoft/vscode/issues/12463(滚动到结尾)如上所述,这在Angular-CLI脚手架中是很烦人的,因为在工作区的根目录下只有一个
tsconfig.json
。很明显,项目的tsconfig.app.json
中可能有不同的baseUrls
,而这些baseUrls
不能全部放在根目录下的一个tsconfig.json
中。作为一种解决方法,除了在
tsconfig.app.json
中的项目特定baseUrl
之外,我还在"baseUrl":"."
的子项目的src文件夹中为VSCode创建了一个额外的最小tsconfig.json
,并从那里打开VSCode。我还没有严格测试过这个,但到目前为止,Angular编译和VSCode智能感知似乎都很满意。bvn4nwqk4#
如果你使用Angular项目,让
baseUrl
和paths
放在tsconfig.json
而不是tsconfig.app.json
中。kyxcudwk5#
我为这个问题挣扎了很长时间,尝试了互联网上几乎所有的解决方案。项目可以编译,但VSCode不荣誉tsconfig.json中的“路径”声明。
最后解决这个问题的方法是删除tsconfig.json
中的“include”和“exclude”部分
我不确定这两个中的哪一个是问题所在,但删除这两个最终解决了我长期存在的问题。
0yg35tkg6#
解析别名问题的另一个可能原因是在主tsconfig文件中使用include属性。默认值是
['**/*']
-只需在覆盖它时将'**/*'添加到包含的路径。这是我的问题,但很难检测到是include导致了这个问题。sz81bmfz7#
1.在应用程序中
tsconfig.app.json
附近创建tsconfig.json
。1.添加下一步设置
1.在
"extends": "./tsconfig.json"
上重写tsconfig.app.json
和tsconfig.spec.json
最终文件结构
0ve6wy6x8#
这可能是编辑器的问题,所以去tsconfig.editor.json,如果你没有tsconfig.editor.json,那么创建一个,在那里扩展你的tsconfig.app.json,然后在你的tsconfig.json中添加“引用”,并添加你的tsconfig编辑器的路径。
tsconfig.editor.json =〉
tsconfig.json =〉