2015-11-09 152 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声明文件实际上反映了上