Estoy tratando de deshacerme de las declaraciones de import pero quiero cargar dinámicamente archivos Javascript.
Estoy usando esta clase para hacerlo.
export function JSImport<T>( importPromise: Promise<T>, ): Promise<T> { // CommonJS's `module.exports` is wrapped as `default` in ESModule. return importPromise.then((m: any) => (m.default || m) as T); }De todos modos, cuando el archivo importado solía tener parámetros de constructor, aparece un error.
Aquí está el uso anterior (que funciona bien):
declare let Tiff: any; const tiff = new Tiff({buffer: xhr.response});Aquí está el nuevo uso:
const importTiff = JSImport( import(/* webpackChunkName: "Tiff" */ 'Tiff'), ); try { importTiff.then((Tiff: any) => { const tiff = new Tiff({buffer: xhr.response}); .... }En la nueva línea de código, aparece un error que dice que TypeError: Tiff no es un constructor
La variable Tiff se ve así en la consola de Chrome. 
¿Cómo usarlo como constructor?
La importación de import(/* chunkNameHint */ "moduleName") realmente proporciona un módulo, que identifica como T genérico en su función JSImport :
export function JSImport<T>( importPromise: Promise<T>, // TypeScript infers T to be the output of the dynamic import, ie the full module ): Promise<T>En lugar de intentar "desempaquetar" automáticamente el módulo (que puede tener exportaciones predeterminadas y/o con nombre), puede usar directamente la importación dinámica:
import(/* webpackChunkName: "Tiff" */ 'Tiff') .then((module) => module.default) // Assuming the module has a default export and it is the one you need .then((Tiff: any) => { const tiff = new Tiff({buffer: xhr.response}); // .... });