**类型脚本版本:**3.2.2、3.3.0-rc
**搜索词:**自动导入、项目引用、自动完成
代码
完整最小再现:https://github.com/MLoughry/typescript-repro的最大值
请参阅 src/a/lib/index.ts
// If another file in the project already has an import from the other project,
// then attempting to auto-import `bar` will prompt you to import from 'obj/b/lib'
// If no other import is found within the project, no auto-import suggestions are found
console.log(bar);
预期行为:
当指定outDir
时(在tsconfig.json
中指定或不指定paths
),自动导入应跨项目边界工作
实际行为:
*如果项目中已经存在跨项目导入:自动导入会尝试从outDir导入。
*如果项目中没有其他跨项目导入:未找到导入建议。
9条答案
按热度按时间0x6upsns1#
因此,这里有两个问题:一个是当项目没有其他对模块的引用时,另一个是当项目有其他对模块的引用时。
现在@sheetalkamat已经列出了它们,我可以理解尝试修复第一个问题(项目没有其他对模块的引用)的性能影响。但是,修复另一个问题(自动导入解析为
outDir
文件而不是源文件)是否会有任何性能影响?看起来只是将outDir
路径Map回源路径的问题,还是我错了?goqiplq22#
@MLoughry是的。
fcy6dtqo3#
在我们的源代码库中也有一个大问题。一个包含许多tsconfig.json的单一源代码树,所有这些都用
outDir: "build"
和composite: true
扩展了单一的tsconfig.base.json。到处都是引用。在大多数情况下,VSC会自动从
build/
文件夹导入。需要始终手动修复导入。mftmpeh84#
@sheetalkamat我们计划更改一些项目以使用项目引用,大多数情况下一切正常,但自动导入功能从构建目录中选择路径的事实有点烦人。
是否有计划在下一个版本中解决这个问题,或者是否有一个路线图?这样我们也许可以等待迁移我们的项目或制定一个新的计划。谢谢!
avkwfej45#
也许我遗漏了一些东西,但我不确定这是如何工作的。如果没有一个本地来源的导入指向另一个项目,TypeScript怎么会知道它的存在呢?
yqyhoc1h6#
在tsconfig.build中的项目引用显然可以找到跨项目的代码。
pb3skfrl7#
谢谢,我现在看到了,
references
部分。看,我就知道我错过了什么;我都不知道这是可能的!我同意它绝对应该能够从其他参考项目中建议模块。
jucafojl8#
对于我来说,这种情况也发生在常规的
node_modules
依赖项上。请参见此处:microsoft/vscode#67505
aurhwmvo9#
我认为这里的问题是,除非文件包含在来自引用项目的模块解析中,它不包括在引用项目中(除非它是--out project)。这有助于保持程序最小,并且只包括所需的文件/符号。自动导入需要程序中已经存在的文件,否则符号不可用。到目前为止,我们没有包括任何文件,不会是你的程序的一部分,当你运行命令行编译,所以我们不必担心额外的错误和IDE经验和命令行之间的差异。我们可能需要改变,如果我们想能够给予这样的建议。