【问题标题】:Ambient TypeScript types hosted within an npm project?托管在 npm 项目中的环境 TypeScript 类型?
【发布时间】:2021-10-17 15:29:09
【问题描述】:

受 Jest 和其他一些工具的启发,我正在开发一个程序,该程序可以加载用 TypeScript 编写的小源文件,并在 Node.js 中的单独 VM 上下文中编译和运行它们。 (不,它不是 Jest 的竞争对手)。

与 Jest 对 describetest 所做的类似,该程序在运行之前将某些预定义的全局变量“注入”到脚本中,因此脚本不需要显式导入这些符号。除了 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


【解决方案1】:

我认为在这种情况下,您必须创建一个 global.d.ts 文件来输入您的全局变量。 请参阅TS docs on globals。它不只是通过安装为您提供开箱即用的类型。但是,您可以告诉人们,如果他们希望 TS 支持将global.d.ts 文件复制粘贴到他们的项目中,那将起作用。

【讨论】:

    【解决方案2】:

    编辑: 您始终可以将所有类型放在 .ts 或 .js 文件中,然后将其导入主文件。不那么建议的路线是您可以在导入的文件或主文件中将您的类型声明为全局变量。

    原件: 如果你不想要一个显式类型的文档,你检查过 JSDoc 吗?我不知道它有多大帮助,但如果你没有,我建议 atleat 看看,一个简单的例子如下所示:

    /**
     * @param {string} somebody - Somebody's name.
     */
    function sayHello(somebody) {
        alert('Hello ' + somebody);
    }
    

    调用该函数时,它会根据您选择的描述推荐类型和变量。它不会像打字稿那样抛出错误,但可以帮助人们弄清楚如何使用该功能。

    阅读更多here

    【讨论】:

      猜你喜欢
      • 2019-12-28
      • 2020-06-08
      • 1970-01-01
      • 2017-04-29
      • 2020-11-25
      • 2011-10-10
      • 2012-03-19
      • 1970-01-01
      • 2017-12-19
      相关资源
      最近更新 更多