2016-05-04 44 views
1

當在Typescript中實現模塊時,我認爲可以導入使用舊導出導出的各種不同導出(例如類,接口,變量和枚舉) =語法。導入使用export =和環境模塊聲明的接口

但是,當我嘗試使用環境模塊,編譯器(1.8.10)似乎忽略導入。

聲明文件:

//Module declaration 
declare module "foo" { 
    interface barProc { 
     (): any; 
    } 

    //Note: if I use the function equivalent to the interface this works ok.  
    function worksOk(): any; 

    export = barProc; 
} 

主文件:

//Module usage 
import myFunc = require("foo"); 
myFunc(); 

在這種情況下,編譯器會抱怨myFunc的是一個未知的標識,進口線沒有出現在輸出js文件。

注意:在示例中,爲了簡單起見,我沒有在接口中添加任何其他成員。然而,接口的原因是我正在建模的JavaScript庫在函數上有成員。

我做錯了什麼,或者有沒有解決方法?

回答

1

barProc是一個接口,因此是一個類型。它不是那種類型的變量。您可以將其導出並將其用作其他類型的類型,但不能將其用作可調用函數,如您的示例中所示。

你舉的例子是大致等同於:

interface barProc { 
    (): any; 
} 

barProc(); 

這樣說來,這是非常明顯的錯誤。你需要的是更多的東西一樣:

interface barProc { 
    (): any; 
} 

var myFunc: barProc; 

myFunc(); 

回爲一個模塊,看起來像:

declare module "foo" { 
    interface barProc { 
     (): any; 
    } 

    var myFunc: barProc; 

    export = myFunc; 
} 


// Elsewhere: 

import myFunc = require("foo"); 
myFunc(); 

我認爲應該做你想要什麼。