【发布时间】:2021-10-17 15:29:09
【问题描述】:
受 Jest 和其他一些工具的启发,我正在开发一个程序,该程序可以加载用 TypeScript 编写的小源文件,并在 Node.js 中的单独 VM 上下文中编译和运行它们。 (不,它不是 Jest 的竞争对手)。
与 Jest 对 describe 和 test 所做的类似,该程序在运行之前将某些预定义的全局变量“注入”到脚本中,因此脚本不需要显式导入这些符号。除了 VSCode 中可怕的“红色曲线”之外,它的效果出奇的好。
问题在于 VSCode 不知道注入的符号。现在,使用 Jest 的解决方案是将 @types/jest 安装到您的项目中,然后将 "types": ["jest"] 属性添加到项目的 tsconfig.json 中。但是,我真的不想只为环境类型维护一个单独的包,也不想打扰 DefinitiveTyped 的人为我的小项目添加支持。
有没有一种方法可以配置我的项目,以便 VSCode(或者更确切地说是 TypeScript 语言服务)知道某些类型始终存在?我尝试过在 package.json 中使用 tsconfig.json、/// reference、“类型”等等,但我尝试过的任何方法似乎都不起作用。
明确地说,我所说的是两个单独的 npm 包之间的关系——一个提供类型定义的“提供”包和一个使用它们的“消费”包。所以就像在 Jest 中一样,依赖于 Jest 的包可以有一个使用 Jest 符号的测试文件,而无需显式导入它们。
如果有人想看一下,GitHub repo 就在这里:https://github.com/viridia/overrun
【问题讨论】:
-
我想到了一种更简单的方法来问这个问题:“npm 上的许多最近的 TypeScript 包都自行托管自己的类型定义,而不是在肯定类型上拥有单独的
@types包。是否可以自我-host ambient types?也就是说,tsconfig“types”属性是否可以引用与已安装包捆绑在一起的类型定义,以便隐式导入这些类型,而不必显式导入? -
您可能可以通过指定替代
typeRoots(例如typeRoots: ["@types", "@your-namespace", "./node_modules/or-even-your-package-maybe"])来实现此功能。我不确定确定这会起作用,因此是评论而不是答案。 -
我认为这是最接近我正在寻找的方法,但正如你所说,我不确定它是否会奏效。似乎缺乏关于 typeroot 的确切工作方式的文档/清晰度 - 我也在 TypeScript discord 频道中提出了同样的问题。
标签: typescript tsconfig