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;