【问题标题】:Typescript. Are Triple-Slash references still required when using "import from"打字稿。使用“导入自”时是否仍需要三斜杠引用
【发布时间】:2016-07-29 20:43:26
【问题描述】:

在旧版本的 Typescript 中,需要添加著名的

/// <reference

label 添加所需的引用。现在在 1.6 版本之后,我们可以使用推荐的 ES6 方式导入依赖项

import Greeter from "./greeter";

我已经阅读了一段时间,但我仍然不清楚是否以及为什么必须完全避免三斜杠引用。

顺便说一句。如果我们在 tsconfig.json 中使用 filesGlob 而不是 files,现在编译器会知道编译 TS 文件的顺序吗?

【问题讨论】:

  • 如果你想编写 es6/amd/commonjs 模块 - 你将使用 import。如果您想拥有单个文件项目 - 您可以使用命名空间和引用。

标签: javascript typescript ecmascript-6


【解决方案1】:

首先,我不相信filesGlob 得到官方支持:https://github.com/Microsoft/TypeScript/issues/1927

现在就三斜杠引用而言,只要 所有内容都在 tsconfig.json 中的 files 中引用,就不需要它了。

您会发现,如果您使用 tsdtypings 之类的工具来管理外部库的类型定义,它们将创建一个包含在 tsconfig.json 中的文件;该单个文件将使用三斜杠引用来包含其余文件。

您可以在TypeScript Handbook 中找到有关三斜杠引用的更多信息

【讨论】:

  • 重点是filesGlob会自动生成一个files子句。但这似乎没有正确的顺序。我会看看你提到的问题。无论如何,您所说的关于类型的内容并不是真的,实际的 .d.ts 文件没有任何三斜杠引用,我不必引用列出这些引用的单个文件
  • 在文件部分,您只需要包含您的入口点。 TypeScript 编译器将从入口点开始自动生成正确的顺序,并遵循您的导入;任何定义全局变量且未在其他地方导入的内容都是不同的情况。
  • 请注意,这仅在使用导入和外部模块时才是正确的。如果您使用命名空间/内部模块,编译器将无法正确排序它们 - 您必须自己在 files 中对它们进行排序或使用三斜杠引用。
【解决方案2】:

当使用内部模块/命名空间时,我们需要 ///&lt;reference 来告诉编译器什么依赖于什么,以便构建依赖关系图并以正确的顺序对文件进行排序。

您描述的 ES6 方式是(外部)模块,请参阅https://github.com/Microsoft/TypeScript/issues/2242。因此,连接的顺序是不相关的,因为它们是异步加载的。

所以使用 ES6 模块,你不需要///&lt;references

至于fileGlobs,这还没有在 TypeScript 中实现,但即使是这样,我认为它也不太可能改变项目中文件的依赖解析。即使在他们实现 fileGlobs 的atom-typescript 中,它们也是非常 opinionated against 的代码,“取决于任何形式的 js 排序”,并且除了手动排序 tsconfig.json 中的文件之外,它们不支持任何其他方式。

【讨论】:

  • 那么如果你使用像Buffer这样的内部节点,你还需要三斜杠引用吗?
  • @DarkNeuron 你的意思是要拉入一个 npm 包并在 TypeScript 代码中使用它?然后它是一个外部模块,您应该使用import 加载它。那么你就不需要三斜杠引用了。
猜你喜欢
  • 2014-05-06
  • 2019-01-15
  • 1970-01-01
  • 1970-01-01
  • 2013-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多