2015-11-09 151 views
0

我目前的打字稿版本是1.6.2,我們將其編譯到ECMA 5.我是新來的TypeScript,所以請理解。這些是進口的庫類型。打字稿導出默認功能

終極版 - thunk.d.ts:

declare module "redux-thunk" { 
    import { Middleware, Dispatch } from 'redux'; 

    export interface Thunk extends Middleware { } 

    export interface ThunkInterface { 
     <T>(dispatch: Dispatch, getState?:() => T): any; 
    } 

    var thunk: Thunk; 

    export default thunk; 
} 

在app.ts:

import thunk from "redux-thunk"; 

console.log(thunk); 

我越來越不確定。這是取自以下代碼: https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/redux-thunk/redux-thunk-tests.ts(7和16行)

我對所有使用默認導入打印機的庫都有同樣的問題。

編輯:我使用NPM爲我做的工作 @Steve芬頓。我剛剛注意到問題出在了Typescript編譯器上。當我創建出口默認功能打字稿文件我得到例如:

Object.defineProperty(exports, "__esModule", { value: true }); 
exports.default = { 
    nextQuestion: nextQuestion, 
}; 

通知exports.default

當我看着redux-thunk.js文件從NPM下載有:

exports.__esModule = true; 
exports['default'] = thunkMiddleware; 

function thunkMiddleware(_ref) { 
    var dispatch = _ref.dispatch; 
    var getState = _ref.getState; 

    return function (next) { 
     return function (action) { 
      return typeof action === 'function' ? action(dispatch, getState) : next(action); 
     }; 
    }; 
} 

module.exports = exports['default']; 

注意module.exports = exports['default'];

如果我把粗體類型轉換成Babel編譯器,我會得到的結果風格。

最重要的部分是,當我將export['default']樣式替換爲exports.default樣式時redux-thunk.js然後一切正常。這是我的編譯器的問題嗎?

+0

隨着ES5可以使用去 模塊'進口咚=需要('終極版-thunk')'。如果你想使用'import'或者'import *'作爲從'redux-thunk'的thunk或者從'redux-thunk'中導入{thunk} – Rik

+0

@Rik從「redux-thunk」導入thunk有什麼不同?並從「redux-thunk」中導入*。 ?如果只有一個導出默認不應該都返回相同? – MistyK

+0

說實話,我不知道爲什麼它不起作用。也許它是ES6語法。我不是一個打字大師。 – Rik

回答

4

我的朋友剛在GitHub上了答案: https://github.com/Microsoft/TypeScript/issues/5565#issuecomment-155216760

ahejlsberg答案:它出現在 「終極版記錄器」 模塊中transpiled 用巴貝爾。當Babel傳輸一個模塊,其模塊的唯一輸出是一個 輸出默認值時,它將注入一個module.exports = exports [「default」];導入 生成的代碼,導致導出的對象本身變成函數 (而不是具有 默認屬性的函數的模塊對象)。當與_interopRequireDefault魔術 是巴貝爾產生進口配對的淨效應是一個默認屬性假模塊 對象被創建和功能現在可以 爲_reduxLogger2.default訪問。

TypeScript不會做任何這種魔法(詳情請看這裏)。 爲了打字稿消耗您需要更改 終極版,logger.d.ts聲明文件實際上反映了上