javascript - Error de importación predeterminado de TypeScript
module typescript1.8 (2)
Estoy intentando configurar un proyecto y ejecutar pruebas con mocha con mjackson/expect library for assertion. Mi código para ser probado es:
// inside src/lib/math.ts
export function sum(a: number, b: number): number {
return a + b;
}
y mi prueba es la siguiente:
// 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);
});
});
Puedo compilar el código con tsc usando el siguiente comando:
find src -name *.ts | xargs tsc --declaration --sourceMap --module commonjs --target es5 --listFiles --outDir .
Sin embargo, cuando ejecuto mocha desde mi directorio de proyectos, utilizo el siguiente comando:
mocha tests
Veo el siguiente error en mis pruebas:
TypeError: expect_1.default is not a function
Cuando abro la versión compilada de mis math.tests.ts , veo la siguiente línea en la parte superior del código transpilado:
var expect_1 = require(''expect'');
Esto está bien y como se esperaba. Sin embargo, cuando miro dentro de la prueba donde se llama a expect , veo la siguiente línea:
expect_1.default(math_1.sum(1, 2)).toEqual(3);
Ahora esta línea de código parece incorrecta. La biblioteca de expect se incluye como un módulo ES6 y la función de expect es una exportación predeterminada del módulo.
Sin embargo, el compilador de TypeScript ha emitido código en mi prueba donde intenta acceder a un atributo default en expect_1 que es una importación desde la biblioteca de expect . La referencia de expect_1 sí misma es la función exportada predeterminada que necesito en mis pruebas y no expect_1.default que no es válida.
Un punto a tener en cuenta es que si modifiqué mis math.tests.ts para importar, math.tests.ts usando la sintaxis require más antigua. Todo funciona bien
Por favor, ayúdame a entender lo que me estoy perdiendo.
PD Yo uso TypeScript 1.8.2 con Node v4.3.1.
Parece que su versión del paquete esperado no coincide con su declaración. Acabo de instalar uno y descubrí que tiene una entrada default :
exports[''default''] = expect;
module.exports = exports[''default''];
Parece que el tipo de espacio de nombres esperado es incorrecto en el paquete npm ( @ types / expect ) Puede realizar una pequeña solución para guardar la comprobación de tipos:
import * as _expect from ''expect'';
const expect = _expect as any as typeof _expect.default;