我当前的打字稿版本是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行)
我在打字稿中使用默认导入的所有库都遇到了同样的问题。
编辑: @Steve Fenton我正在使用npm为我做这份工作。我刚才注意到问题出在Typescript编译器上。当我使用导出默认函数创建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-thunk打字输入Babel编译器,我会得到exports['default']
样式的结果。
最重要的是,当我在export['default']
中将exports.default
样式替换为redux-thunk.js
样式时,一切正常。这是我的编译器的问题吗?
答案 0 :(得分:5)
我的朋友刚刚在github上得到了答案: https://github.com/Microsoft/TypeScript/issues/5565#issuecomment-155216760
ahejlsberg回答:它似乎是&#34; redux-logger&#34;模块被翻译 与巴别塔。当Babel转换出一个唯一导出的模块时 export default它会注入一个module.exports = exports [&#34;默认&#34;];成 生成的代码,导致导出的对象成为函数 本身(而不是具有函数的模块对象 默认属性)。与_interopRequireDefault魔法配对时 Babel为进口产生的净效果就是假模块 创建具有默认属性的对象,现在可以使用该功能 作为_reduxLogger2.default访问。
TypeScript没有做任何这种魔术(有关详细信息,请参阅此处)。 为了让TypeScript使用你需要更改的模块 redux-logger.d.ts声明文件实际反映了将要发生的事情 上