Por ejemplo, cuando quieres trabajar con código JavaScript que se ve así:
tsconst Greeter = require("super-greeter");const greeter = new Greeter();greeter.greet();
Para manejar la importación tanto a través de UMD como de módulos:
ts// Definiciones de tipo para [~EL NOMBRE DE LA LIBRERÍA~] [~NÚMERO DE VERSIÓN OPCIONAL~]// Proyecto: [~EL NOMBRE DEL PROYECTO~]// Definiciones por: [~TU NOMBRE~] <[~UNA URL PARA TI~]>/*~ Este es el archivo de plantilla del módulo para módulos de clase.*~ Deberías renombrarlo a index.d.ts y colocarlo en una carpeta con el mismo nombre que el módulo.*~ Por ejemplo, si estuvieras escribiendo un archivo para "super-greeter", este*~ archivo debería ser 'super-greeter/index.d.ts'*/// Ten en cuenta que los módulos ES6 no pueden exportar directamente objetos de clase.// Este archivo debe importarse usando el estilo CommonJS:// import x = require('[~EL MÓDULO~]');//// Alternativamente, si --allowSyntheticDefaultImports o// --esModuleInterop está activado, este archivo también puede ser// importado como una importación por defecto:// import x from '[~EL MÓDULO~]';//// Consulta la documentación de TypeScript en// https://www.typescriptlang.org/docs/handbook/modules.html#export--and-import--require// para entender las soluciones comunes para esta limitación de los módulos ES6./*~ Si este módulo es un módulo UMD que expone una variable global 'myClassLib' cuando*~ se carga fuera de un entorno de cargador de módulos, declara esa global aquí.*~ De lo contrario, elimina esta declaración.*/export as namespace myClassLib;/*~ Esta declaración especifica que la función constructora de la clase*~ es el objeto exportado desde el archivo*/export = Greeter;/*~ Escribe los métodos y propiedades de tu módulo en esta clase */declare class Greeter {constructor(customGreeting?: string);greet: void;myMethod(opts: MyClass.MyClassMethodOptions): number;}/*~ Si también quieres exponer tipos desde tu módulo, puedes*~ colocarlos en este bloque.*~*~ Ten en cuenta que si decides incluir este espacio de nombres, el módulo puede ser*~ importado incorrectamente como un objeto de espacio de nombres, a menos que*~ --esModuleInterop esté activado:*~ import * as x from '[~EL MÓDULO~]'; // ¡INCORRECTO! ¡NO HAGAS ESTO!*/declare namespace MyClass {export interface MyClassMethodOptions {width?: number;height?: number;}}