2015-02-08 35 views
7

使用Typescript,有沒有辦法從外部模塊導入類型?導入外部定義

基本上我只想讓一個模塊知道另一個模塊的類型(爲Intellisense提供支持),但是沒有JavaScript中的輸出。我想這樣做是因爲有問題的模塊可能已經加載,也可能沒有加載 - 即沒有硬依賴性,但我想要一些類型化的代碼運行並使用該模塊(如果存在的話)。

希望這是顯而易見的。

+0

爲什麼這是downvoted? – ditoslav 2015-10-28 14:20:21

回答

6

您可以使用定義文件以及引用註釋,這樣可以在不添加任何導入語句(例如requiredefine)的情況下使用這些類型。

///<reference path="module.d.ts" /> 

您可以自動生成編譯時定義文件,雖然你的目的,你可能會想手搖自定義一個(取決於你想如何使用它 - 自動人會想到要導入)。

示例代碼

ModuleA.ts

class ExampleOne { 
    doSomething() { 
     return 5; 
    } 
} 

export = ExampleOne; 

ModuleB.ts

class ExampleTwo { 
    doSomething() { 
     return 'str'; 
    } 
} 

export = ExampleTwo; 

用途:

import B = require('moduleb'); 

var a = new ExampleOne(); 
var b = new B(); 

爲了使這項工作,你會創建ModuleA.d.ts

ModuleA.d.ts

declare class ExampleOne { 
    doSomething(): number; 
} 

,然後引用它,如下所示:

/// <reference path="modulea.d.ts" /> 

import B = require('moduleb'); 

var a = new ExampleOne(); 
var b = new B(); 
+0

我不認爲這與外部模塊一起工作?我認爲這只是內部的。我會盡我所能去! – Barguast 2015-02-08 18:28:07

+0

我已經擴展了一個例子來說明如何做到這一點。 – Fenton 2015-02-09 08:52:49

+0

謝謝。這似乎工作,但不幸的是,自動生成的.d.ts文件包含'export ='行,似乎阻止類型通過。我會在GitHub上提出這個問題。 – Barguast 2015-02-09 11:19:12