簡體   English   中英

打字稿導出默認功能

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM