Por ejemplo, cuando quieres trabajar con código JavaScript que extiende otra biblioteca.
tsimport { greeter } from "super-greeter";// API normal de Greetergreeter(2);greeter("Hello world");// Ahora extendemos el objeto con una nueva función en tiempo de ejecuciónimport "hyper-super-greeter";greeter.hyperGreet();
La definición para “super-greeter”:
ts/*~ Este ejemplo muestra cómo tener múltiples sobrecargas para tu función */export interface GreeterFunction {(name: string): void(time: number): void}/*~ Este ejemplo muestra cómo exportar una función especificada por una interfaz */export const greeter: GreeterFunction;
Podemos extender el módulo existente de la siguiente manera:
ts// Definiciones de tipo para [~EL NOMBRE DE LA BIBLIOTECA~] [~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 plugin del módulo. Debes 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'*//*~ En esta línea, importa el módulo al que este módulo añade */import { greeter } from "super-greeter";/*~ Aquí, declara el mismo módulo que el que importaste arriba*~ luego expandimos la declaración existente de la función greeter*/export module "super-greeter" {export interface GreeterFunction {/** ¡Saluda aún mejor! */hyperGreet(): void;}}
Esto utiliza fusión de declaraciones (declaration merging).
El Impacto de ES6 en los Plugins de Módulo
Algunos plugins añaden o modifican exportaciones de nivel superior en módulos existentes. Aunque esto es legal en CommonJS y otros cargadores, los módulos ES6 se consideran inmutables y este patrón no será posible. Debido a que TypeScript es independiente del cargador, no hay una imposición en tiempo de compilación de esta política, pero los desarrolladores que pretendan hacer la transición a un cargador de módulos ES6 deben ser conscientes de esto.