2016-08-19 17 views
2

我是打字稿的新手。如何導出typedefinitions(類,接口)+來自特定文件的所有變量?我嘗試這樣做:打字稿導出和重新導出界面和其他數據

models.ts

export interface CounterState { 
    count: number; 
} 

let t = 5; 
export {t}; 

index.ts

import * as models from './models'; 
models.t -> ok 
models.CounterState -> not visible, why? 
export default { models }; 

reducer.ts

import CounterStore from "./index"; 


CounterStore.models.t -> ok 
CounterStore.models.CounterState -> not visible, why? 

爲什麼*是不是進口的一切嗎? 如果我這樣做:import {CounterState} from "./models";它會工作。

編輯:如果我改變接口類,它按預期工作。

回答

1

的問題不在於導入/導出,但與事實,你是試圖評估的接口,這是不可能的:

  • 實際接口聲明不會編譯到任何JavaScript,所以試圖撥打models.CounterState在編譯好的js中沒有任何意義。

  • 但是,如果您聲明瞭一個類,則確實有編譯結果。這解釋了爲什麼這不會引發錯誤。

我只是想給打字稿錯誤的極端默默無聞的另一個喊聲。

對於兩者之間的區別,看看在equivalent playground example並將其編譯到什麼:

interface ICounter { // No compilation result 
    count: number 
} 

class Counter { // has actual compilation result 
    count: number 
} 

let interfaceImplemenetation: ICounter // Compiles fine 
Counter // Compiles fine 
ICounter // Compiles to undefined 
+0

感謝澄清,http://jaysoo.ca/2016/02/28/organizing-redux - 應用/ - >如何在打字稿中遵循這些規則?我的意思是創建索引,其中包含其他模塊的一切? – MistyK

+0

我不是100%確定你的意思。如果我創建了REDX應用程序,我通常只是將我的狀態接口放入根目錄中的某個全局聲明文件中(例如index.d.ts),那麼我就不必將它們導入到任何地方了。\\ _(ツ)_ /¯。 (如果這是你的問題) –

+0

是的,但每個減速器都有一個狀態。我不是在談論全球國家,而是單一的還原國的狀態,後來當我將它們結合在全球國家時,我需要參考 – MistyK