[英]Typescript export default function
我當前的打字稿版本是1.6.2,我們將其編譯為ECMA5。我是TypeScript的新手,所以請理解。 這些是導入的庫類型。
redux-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行)
對於在Typescript中使用默認導入的所有庫,我都遇到相同的問題。
編輯:@Steve Fenton我正在使用npm為我做這項工作。 我剛剛注意到問題出在Typescript編譯器上。 當我使用導出默認功能創建打字稿文件時,例如:
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = {
nextQuestion: nextQuestion,
};
注意exports.default
當我查看從npm下載的redux-thunk.js
文件時,有:
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'];
如果我將類似redux的類型輸入Babel編譯器中,則會得到帶有exports['default']
樣式的結果。
最重要的部分是,當我更換export['default']
風格exports.default
風格的redux-thunk.js
然后一切正常。 我的編譯器有問題嗎?
我的朋友剛剛在github上得到了答案: https : //github.com/Microsoft/TypeScript/issues/5565#issuecomment-155216760
ahejlsberg答案:看來“ redux-logger”模塊已與Babel進行了轉譯。 當Babel轉換僅導出為導出默認值的模塊時,將注入一個模塊。exports= exports [“ default”]; 到生成的代碼中,導致導出的對象成為函數本身(而不是將函數作為默認屬性的模塊對象)。 與Babel為導入生成的_interopRequireDefault魔術配對時,最終效果是創建了一個帶有默認屬性的假模塊對象,並且該函數現在可以通過_reduxLogger2.default訪問。
TypeScript並沒有發揮任何神奇作用(有關更多詳細信息,請參見此處)。 為了讓TypeScript使用模塊,您需要更改redux-logger.d.ts聲明文件以實際反映正在發生的事情
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.