Por ejemplo, cuando quieres trabajar con código JavaScript que se ve así:
tsimport greeter from "super-greeter";greeter(2);greeter("Hello world");
Para manejar tanto la importación vía UMD como módulos:
ts// Definiciones de tipo para [~THE LIBRARY NAME~] [~OPTIONAL VERSION NUMBER~]// Proyecto: [~THE PROJECT NAME~]// Definiciones por: [~YOUR NAME~] <[~A URL FOR YOU~]>/*~ Este es el archivo de plantilla de módulo para módulos de función.*~ 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('[~THE MODULE~]');//// Alternativamente, si --allowSyntheticDefaultImports o// --esModuleInterop está activado, este archivo también puede ser// importado como una importación por defecto:// import x from '[~THE MODULE~]';//// 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 'myFuncLib' cuando*~ se carga fuera de un entorno de cargador de módulos, declara ese global aquí.*~ De lo contrario, elimina esta declaración.*/export as namespace myFuncLib;/*~ Esta declaración especifica que la función*~ es el objeto exportado desde el archivo*/export = Greeter;/*~ Este ejemplo muestra cómo tener múltiples sobrecargas para tu función */declare function Greeter(name: string): Greeter.NamedReturnType;declare function Greeter(length: number): Greeter.LengthReturnType;/*~ Si quieres exponer tipos desde tu módulo también, puedes*~ colocarlos en este bloque. A menudo querrás describir la*~ forma del tipo de retorno de la función; ese tipo debería*~ declararse aquí, como muestra este ejemplo.*~*~ Ten en cuenta que si decides incluir este namespace, el módulo puede ser*~ importado incorrectamente como un objeto de namespace, a menos que*~ --esModuleInterop esté activado:*~ import * as x from '[~THE MODULE~]'; // ¡INCORRECTO! ¡NO HAGAS ESTO!*/declare namespace Greeter {export interface LengthReturnType {width: number;height: number;}export interface NamedReturnType {firstName: string;lastName: string;}/*~ Si el módulo también tiene propiedades, decláralas aquí. Por ejemplo,*~ esta declaración dice que este código es legal:*~ import f = require('super-greeter');*~ console.log(f.defaultName);*/export const defaultName: string;export let defaultLength: number;}