TypeScript默认导入失败

cod*_*tix 7 javascript module typescript typescript1.8

我正在尝试设置一个项目并mocha使用mjackson/expect库运行测试以进行断言.我要测试的代码是:

// inside src/lib/math.ts
export function sum(a: number, b: number): number {
  return a + b;
}
Run Code Online (Sandbox Code Playgroud)

我的测试如下:

// 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);
  });
});
Run Code Online (Sandbox Code Playgroud)

我可以使用以下命令使用tsc编译代码:

find src -name *.ts | xargs tsc --declaration --sourceMap --module commonjs --target es5 --listFiles --outDir .

但是当我mocha使用以下命令从项目目录运行时:

mocha tests

我在测试中看到以下错误:

TypeError: expect_1.default is not a function

当我打开我的编译版本时math.tests.ts,我在转换后的代码顶部看到以下行:

var expect_1 = require('expect');

这很好,正如预期的那样.但是,当我查看测试的内部时expect,我看到以下行:

expect_1.default(math_1.sum(1, 2)).toEqual(3);
Run Code Online (Sandbox Code Playgroud)

现在这行代码似乎错了.该expect库捆绑为ES6模块,该expect功能是模块的默认导出.

但是,TypeScript编译器已将代码发送到我的测试中,它尝试访问从库中导入的default属性.该基准本身是默认的导出函数,我需要在我的测试,而不是这是无效的.expect_1expectexpect_1expect_1.default

需要注意的是,如果我使用旧语法修改我math.tests.ts的导入.一切正常.expectrequire

请帮我理解我错过的东西.

PS我使用TypeScript 1.8.2和Node v4.3.1.

vil*_*ane 0

看来您的期望包版本与其声明不匹配。我刚刚安装了一个,发现它确实有一个default条目:

exports['default'] = expect;
module.exports = exports['default'];
Run Code Online (Sandbox Code Playgroud)