TypeScript默认导入失败
我正在尝试设置项目并使用mocha
与mjackson/expect
库进行测试以进行断言。我的代码进行测试是:TypeScript默认导入失败
// inside src/lib/math.ts
export function sum(a: number, b: number): number {
return a + b;
}
和我的测试如下:
// inside src/tests/math.tests.ts
/// <reference path="../../typings/main/ambient/mocha/mocha.d.ts" />
/// <reference path="../../typings/main/ambient/expect/expect.d.ts" />
import expect from 'expect';
import {sum} from '../lib/math';
describe('sum',() => {
it('should add two numbers',() => {
expect(sum(1, 2)).toEqual(3);
});
});
我可以使用下面的命令来编译与TSC代码:
但是,当我运行mocha
从我的项目目录中使用以下命令:
mocha tests
我看到下面的错误在我的测试:
TypeError: expect_1.default is not a function
当我打开我math.tests.ts
的编译版本,我看到了下面一行transpiled代码的顶部:
var expect_1 = require('expect');
这很好,和预期的一样。然而,当我看到了测试,其中expect
被称为里面,我看到了下面一行:
expect_1.default(math_1.sum(1, 2)).toEqual(3);
现在这行代码似乎是错误的。 expect
库被捆绑为ES6模块,而expect
函数是模块的默认导出。
但是,TypeScript编译器已将代码发送到我的测试中,它试图访问expect_1
上的default
属性,该属性是从expect
库导入的。 expect_1
引用本身是我在测试中需要的默认导出函数,而不是expect_1.default
,这是无效的。
需要注意的一点是,如果我修改了我的math.tests.ts
以使用旧的require
语法导入expect
。一切正常。
请帮我理解我错过了什么。
P.S.我使用TypeScript 1.8.2和Node v4.3.1。
看来你的期望包版本不符合其声明。我刚装了一个,发现它确实有一个default
项:
exports['default'] = expect;
module.exports = exports['default'];
它看起来像预期的命名空间类型是错误的NPM包(@types/expect)可以使小的变通方法来保存类型检查:
import * as _expect from 'expect';
const expect = _expect as any as typeof _expect.default;
嘿,什么是解决方法 – tutok
非常感谢,工作。有人正在对此提出请求吗?看起来github上的最新版本已经从npm install可以节省的内容中改变了。 –
对于我'const expect = require('expect');'作品 – tutok