javascript - Typescript eksport standardfunktion


Min nuværende TypeScript-version er 1.6.2, og vi kompilerer den til ECMA 5. Jeg er ny til TypeScript, så vær venlig at være forstående. Dette er de importerede biblioteks-typings.

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;
}

I app.ts:

import thunk from "redux-thunk";

console.log(thunk);

Jeg får undefined. Dette er koden taget fra: https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/redux-thunk/redux-thunk-tests.ts (linje 7 og 16)

Jeg har samme problem med alle biblioteker, der bruger standardimport i TypeScript.

REDIGER: @Steve Fenton Jeg bruger npm til at gøre arbejdet for mig. Jeg har lige bemærket, at problemet er med Typescript-kompilatoren. Når jeg opretter en typescript-fil med export default function, får jeg for eksempel:

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

Bemærk exports.default

Når jeg kigger i redux-thunk.js-filen, der er hentet fra npm, er der:

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'];

Bemærk module.exports=exports['default'];

Hvis jeg tager redux-thunk typninger ind i Babel-kompileren, får jeg resultaterne med exports['default']-stil.

Det vigtigste er, at når jeg erstatter export['default'] stilen med exports.default stilen i redux-thunk.js, så virker alt. Er dette et problem med min compiler?

Svar #1

Min ven fik lige svaret på github: https://github.com/Microsoft/TypeScript/issues/5565#issuecomment-155216760

ahejlsberg svar: Det ser ud til, at modulet "redux-logger" blev transpileret med Babel. Når Babel transpilerer et modul, hvis eneste eksport er en export default, indsætter det en module.exports=exports["default"]; i den genererede kode, hvilket får det eksporterede objekt til at blive selve funktionen (i stedet for et module-objekt, der har funktionen som standard ejendom). Når det parres med den _interopRequireDefault-magi, som Babel genererer til imports, er den samlede effekt, at der oprettes et falsk module-objekt med en default ejendom, og funktionen kan nu tilgås som _reduxLogger2.default.

TypeScript laver ikke noget af denne magi (se her for flere detaljer). For at TypeScript kan bruge modulet, skal du ændre declarationsfilen redux-logger.d.ts, så den faktisk afspejler, hvad der foregår

Relaterede artikler