5

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

键入文件冲突

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

双重定义很常见。事实上,打字工具故意创建重复的打字集(原因最好在别处解释)。在项目结构中查找类型文件夹,我们应该在其中找到类似的内容:

typings
  browser
    ambient
      es6-shim
        es6-shim.d.ts
  main
    ambient
      es6-shim
        es6-shim.d.ts
  browser.d.ts
  main.d.ts

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

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

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

问题

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

为什么推荐你使用typings/browser.d.ts前端包?

我的猜测是因为支持该browser领域可以创建不同的类型?

如果是这样,该browser字段是什么以及它以何种方式更改类型?

4

1 回答 1

4

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

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

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

最终,对您来说几乎没有成本(除了您机器上的文件空间)和潜在的功能,否则这些功能是不可能的。

于 2016-03-01T15:58:09.550 回答