2016-04-08 23 views
13

在旧版本的打字稿它需要添加著名Typescript。使用“导入从”的时候仍然需要三斜杠引用

/// <reference 

标签添加所需的引用。现在版本1.6后,我们就可以导入使用我一直在读了一段时间的建议ES6方式

import Greeter from "./greeter"; 

的依赖,但它仍然不是很清楚,我是否和为什么三斜杠引用必须完全避免或不。

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

+0

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

回答

3

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

现在只要三斜杠参考,它不是必需的,只要的一切都在files在tsconfig.json引用。

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

您可以找到有关在TypeScript Handbook

+0

问题是filesGlob自动生成一个文件子句。但是这似乎没有正确的顺序。我会看看你提到的问题。无论如何,你所说的打字实际上并不是真的,实际的.d.ts文件没有任何三斜杠引用,我不必引用列出这些引用的单个文件。 – iberbeu

+0

尽管在文件部分,你只需要包含你的入口点。 TypeScript编译器将自动从入口点开始生成正确的订单,并在导入之后;任何定义全局变量并且不会导入其他地方的情况都是不同的情况。 – mjohnsonengr

+0

请注意,这只适用于导入和外部模块。如果您使用的是命名空间/内部模块,编译器将不会正确排序它们 - 您必须自己在*文件*中命令它们或使用三斜杠引用。 – Alex

2

三重斜线引用的详细信息,如果使用内部模块/命名空间,我们需要///<reference为了告诉编译取决于什么,以建立依赖关系图和排序文件按正确的顺序。

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

所以使用ES6模块,您不需要///<references

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

+0

因此,如果您使用的是像Buffer这样的内部节点,您仍然需要三斜杠引用? – DarkNeuron

+0

@DarkNeuron你的意思是你想拉入一个npm包并在TypeScript代码中使用它?然后它是一个外部模块,您应该使用'import'加载它。那么你将不需要三斜杠引用。 – Alex

相关问题