2016-04-08 24 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

相關問題