为什么打字工具故意创建重复的打字集?

cfi*_*her 5 typescript typescript-typings angular

阅读Angular 2快速入门我在TypeScript配置下遇到了这一部分:

键入文件冲突

TypeScript编译器不允许重新定义类型.例如,如果为Promise类型提供了两个定义,则会抛出错误.

双重定义很常见.实际上,打字工具故意创建重复的打字集(出于其他地方最佳解释的原因).在项目结构中查找typings文件夹,我们应该在其中找到类似的内容:

typings
  browser
    ambient
      es6-shim
        es6-shim.d.ts
  main
    ambient
      es6-shim
        es6-shim.d.ts
  browser.d.ts
  main.d.ts
Run Code Online (Sandbox Code Playgroud)

es6-shim类型是重复的,browser.d.ts和main.d.ts有重叠的内容.

如果我阅读自述文件,它会说:

如果您正在构建前端软件包,建议您使用typings/browser.d.ts.浏览器类型通过遵循浏览器字段覆盖进行编译.

问题:

为什么打字工具故意创建重复的打字集?

为什么建议您使用typings/browser.d.ts前端包?

我的猜测是因为支持这个browser领域可以创造出不同的类型?

如果是这样,那么这个browser领域是什么?它改变了什么类型?

Jac*_*Guy 4

你的猜测是对的。Typings 认识到包在浏览器和其他位置上的功能可能有所不同。对于大多数常见的包来说,此功能是不必要的,因为同构 JS 很流行,并且许多包在所有 JS 环境中都具有相同的功能。

但是,如果我的代码有意检查环境的功能,或者如果我想阻止用户使用浏览器中损坏的功能,那么这样做会很有帮助。

这是一个例子。我有一个颜色选择器包。如果我在桌面上,这个包将允许我从屏幕上的任何位置选择颜色。显然这依赖于系统级API,并且不能被浏览器使用。另一方面,我的浏览器可以在浏览器窗口中选择颜色。我没有发布一个全新的包,而是向程序员公开不同的类型,以便他们知道根据他们的环境允许哪些功能。

最终,您几乎不需要花费任何成本(除了计算机上的文件空间),并且可以获得其他方式不可能实现的潜在功能。