【问题标题】:Make TypeScript with JSDoc see reference libraries without import使用 JSDoc 制作 TypeScript 无需导入即可查看参考库
【发布时间】:2018-12-27 05:23:36
【问题描述】:

我正在使用 TypeScript 对 JavaScript 项目进行类型检查(不发出)。在 JavaScript 项目中,我使用 JSDoc 来简化 TypeScript 的工作,但我也使用 3rd 方包,它们提供自己的类型(不是@types),TypeScript 看不到这些包,因为它们仅被称为使用页面上一个简单的script 标签。

我不想为库对window 的贡献手动编写类型,因为这些包已经带有自己的类型,TypeScript 只是看不到它们,我想知道是否有办法做到这一点了解他们。

我不能使用 import/// <reference,因为源文件是 JavaScript 文件,而不是 TypeScript 文件,我必须坚持 JavaScript 允许的内容。

我不能使用@types,因为打字直接来自包,而不是@types。我可能会 npm install 包,但 TypeScript 无法知道项目引用它们(没有导入等),所以我认为需要有一个编译器设置让它知道。

我已经尝试npm installing 使用 script 并设置 typeRoots 的 TypeScript 在运行时获取的依赖项的 NPM 包:

"compilerOptions": {
  "typeRoots": [
    "node_modules/package"
  ]
}

但这没有任何效果。

我也尝试过配置“typeAcquisition”来像这样进行竞标:

{
  "typeAcquisition": {
    "enable": true,
    "include": [
      "package"
    ]
  }
}

这也不起作用,这是可以理解的,因为我认为这只会自动获取 @types,而在我的情况下,键入是我之前所说的实际包的一部分。

如何让 TypeScript 知道我的 JavaScript 项目,它以无法从源代码中看到的方式对引用包进行类型检查,以便加载它们的类型,并且包提供的全局对象被识别和类型检查?

【问题讨论】:

    标签: typescript jsdoc


    【解决方案1】:

    试试compilerOptions.types。它包含要包含在编译中的类型声明文件

    "types": [
      "package"
    ],
    

    【讨论】:

    • 我的理解是否正确,这只会从包本身中提取包的 @ types 而不是 index.d.ts 或 package.json 中的 typings 字段?在我的情况下,包没有@类型。
    • 否 — 如果您的包在 package.json 中有 typings(或 types)字段,它将起作用。我在另一种情况下描述了它,其中有问题的包是 Vue(它也捆绑了自己的类型):stackoverflow.com/a/53794208/10325032.
    • 谢谢,这解决了它,但帮助发现了另一个我不知道如何处理的案例。其他人也可能会遇到这种情况:如果类型错误地显示依赖项,就好像它只是一个模块文件一样,但实际代码对window 有贡献怎么办?如何更新它们?后续问题stackoverflow.com/q/53958469/2715716
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-31
    • 2014-09-05
    • 2013-09-13
    • 1970-01-01
    • 2012-01-22
    • 1970-01-01
    相关资源
    最近更新 更多