【问题标题】:Relative @Types imports in Angular librariesAngular 库中的相对 @Types 导入
【发布时间】:2019-02-06 14:16:32
【问题描述】:

我目前正在尝试创建一个小型 npm 包库,其中包含一些用于 Jasmine 测试的实用程序。代码在我的 GitHub https://github.com/DrMueller/MLAH.Testing 中,目前只包含 2 个函数和一个类型。 不幸的是,我并不是 100% 热衷于 d.ts 文件导入的魔力究竟是如何工作的: 根据官方文档:

默认情况下,所有可见的“@types”包都包含在您的 汇编。任何封闭文件夹的 node_modules/@types 中的包 被认为是可见的;具体来说,这意味着包内 ./node_modules/@types/

Therefore, creating a type like

     export type SpyOf<T> = {
       [Method in keyof T]: jasmine.Spy;
     };

我猜,当我删除 typeRoots 时,找到了 jasmine 类型,但我仍然得到

错误 TS2503:找不到命名空间“茉莉花”。

还考虑到其他属性,如 include 或 types,根据文档,它们总是分隔找到的类型,因此不指定它们应该考虑 node_modules/@types 中的所有类型。

目前唯一可行的解​​决方案是通过手动将其添加到每个文件中

/// <reference path="../../node_modules/@types/jasmine/index.d.ts" />

这适用于编译,但由于创建的 npm 包与代码不在同一个相对文件夹中,因此会引发异常。

是我遗漏了什么,还是茉莉花是某种特殊的模块?

【问题讨论】:

  • 当我克隆你的仓库时,在根目录下运行npm install,并删除src/app/app.component.ts中的&lt;reference&gt;,项目仍然可以使用tsc -p .编译成功。你在做什么不工作?
  • hm 有趣,使用 tsc,我得到错误,'baseUrl 不是一个可识别的选项。我通常用'ng build'来构建,你能试试吗?

标签: angular typescript jasmine


【解决方案1】:

我担心解决这个问题需要我没有的 Angular 特定知识,但不需要:我看到 angular.json 引用了 src/tsconfig.app.json,我可以通过运行 tsc -p src/tsconfig.app.json 来重现该问题。

src/tsconfig.app.json 中删除"types": [] 行。该行正在关闭所有可见 @types 包的自动加载。

【讨论】:

  • 哇,我就知道事情就是这么简单。有趣的是,Angular 会自动添加此属性,因为我没有看到任何好处。非常感谢。
猜你喜欢
  • 2023-02-24
  • 2018-07-23
  • 2020-02-06
  • 1970-01-01
  • 2017-05-06
  • 1970-01-01
  • 1970-01-01
  • 2019-03-23
  • 2011-05-09
相关资源
最近更新 更多