2017-10-08 89 views
0

我定義的類的模塊中,並出口爲默認,這樣的:做一個出口類全局可見

// file: Component.ts 
import UIComponent from "path/to/UIComponent"; 

namespace typescript.example.app 
{ 
    export class Component extends UIComponent 
    { 
     ... 
    } 
} 

export default typescript.example.app.Component; 

在另一個文件中,除非我想用Component類在運行時(創建一個實例或調用一個靜態方法),我不需要導入它。

// file: UseComponent.ts 
namespace typescript.example.app 
{ 
    export class UseComponent 
    { 
     ... 
     // error: namespace typescript.example.app has no exported member Component 
     public myMethod(component: typescript.example.app.Component) { ... } 
     ... 
    } 
} 

export default typescript.example.app.UseComponent; 

我該如何讓typescript.example.app.Component在模塊內聲明爲全局可見?

+1

導出'namespace'。 – ideaboxer

+0

試圖在'export default typescript.example.app.Component;'之前放置'export namespace typingcript'並得到此錯誤:「合併的聲明中的單個聲明'typescript'必須全部導出或全部爲本地。」 – lmcarreiro

+0

我正在使用框架,我需要將該類導出爲默認值 – lmcarreiro

回答

1

命名空間是TypeScript爲了誤導初學者而保留的非標準功能。使用ES6只有模塊:

// file: Component.ts 
import UIComponent from "path/to/UIComponent"; 

export default class Component extends UIComponent { 
    // ... 
} 

然後:

// file: UseComponent.ts 
import Component from "./Component"; 

export default class UseComponent { 
    public myMethod(component: Component) { 
    } 
} 

參見:

+0

這正是我不想做的。爲什麼導入一個模塊,如果編譯後我不需要它?它的唯一用處在於參數的類型,在打字稿將其轉換爲javascript後,它不會再存在於我的代碼中了...... – lmcarreiro

+0

@lmcarreiro如果JavaScript中不需要它,則TypeScript不會生成「import」。你可以試試。 – Paleo

+0

我相信,如果這是正確的方式,讓我們來做。謝謝。 – lmcarreiro