javascript module typescript typescript1.8

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;