español - typescript vs javascript diferencias
La importación de TypeScript desde bibliotecas escritas en ES5 vs. ES6 (1)
Obtengo errores extraños al ejecutar código TypeScript transpilado que depende de bibliotecas externas
Tales como Uncaught TypeError: es5_lib_1.default is not a function
¿Qué pasa?
Las especificaciones del módulo ES6 difieren ligeramente de CommonJs, que se describen aquí . Esto introduce algunos problemas de compatibilidad algo exasperados en TypeScript.
TypeScript intenta adivinar la forma correcta de transpilar sentencias import/require
basadas en dos entradas
- La propiedad del
module
entsconfig.json
- Cómo se escribe la declaración de
export
en el archivo.d.ts
correspondiente
En el archivo tsconfig.json
, podemos establecer el formato del módulo que utilizará la salida transpilada. Por ejemplo, module: ''es6''
Lo que elijamos aquí tiene un impacto en el tipo de sintaxis de importación que permitirá TypeScript. Lo cual también se vio afectado por la forma en que se escriben los archivos de forma de .d.ts
correspondientes.
Si estamos importando desde una biblioteca de CommonJS y nuestro módulo de salida se dirige a CommonJS, debemos usar
//tsconfig.json
module: "commonjs"
//.d.ts
declare module ''foo'' {
exports = Foo;
}
// App.ts
import Foo = require(''foo'');
Si estamos importando desde una biblioteca de CommonJS y nuestro módulo de salida se dirige a ES6, debemos usar:
//tsconfig.json
module: "es6"
//.d.ts
declare module ''foo'' {
exports default Foo;
}
// App.ts
import {default as Foo} from ''foo'';
Si estamos importando Desde una biblioteca ES6 , podemos usar el estilo de import {default ... }
independientemente del formato del módulo de salida específico
//tsconfig.json
module: "es6|commonjs"
//.d.ts
declare module ''foo.es6'' {
exports default FooES6;
}
// App.ts
import {default as FooES6} from ''foo.es6'';
¿Qué significa esto para los archivos .d.ts
que recuperamos de tsd install
?
Según el producto al que nos .d.ts
, es posible que tengamos que modificar los archivos .d.ts
vez que se hayan instalado para satisfacer nuestras necesidades. La .d.ts
archivos .d.ts
están escritos para los módulos de commonjs
y, por lo tanto, usarán el estilo export = <lib>
. Pero si desea apuntar a la salida de ES6, tendrá que editar esto y cambiarlo para export default