Módulos Modificadores Globales
Un módulo modificador global altera los valores existentes en el ámbito global cuando se importan.
Por ejemplo, podría existir una biblioteca que añada nuevos miembros a String.prototype cuando se importa.
Este patrón es algo peligroso debido a la posibilidad de conflictos en tiempo de ejecución,
pero aún podemos escribir un archivo de declaración para él.
Identificando módulos modificadores globales
Los módulos modificadores globales son generalmente fáciles de identificar a partir de su documentación.
En general, son similares a los plugins globales, pero necesitan una llamada require para activar sus efectos.
Podrías ver documentación como esta:
js// Llamada 'require' que no usa su valor de retornovar unused = require("magic-string-time");/* o */require("magic-string-time");var x = "hello, world";// Crea nuevos métodos en tipos incorporadosconsole.log(x.startsWithHello());var y = [1, 2, 3];// Crea nuevos métodos en tipos incorporadosconsole.log(y.reverseAndSort());
Aquí hay un ejemplo
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 módulo modificador global. 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'*//*~ Nota: Si tu módulo modificador global es invocable o construible, necesitarás*~ combinar los patrones aquí con los de los archivos de plantilla module-class o module-function*~ archivos de plantilla*/declare global {/*~ Aquí, declara cosas que van en el espacio de nombres global, o aumenta*~ declaraciones existentes en el espacio de nombres global*/interface String {fancyFormat(opts: StringFormatOptions): string;}}/*~ Si tu módulo exporta tipos o valores, escríbelos como de costumbre */export interface StringFormatOptions {fancinessLevel: number;}/*~ Por ejemplo, declarando un método en el módulo (además de sus efectos secundarios globales) */export function doSomething(): void;/*~ Si tu módulo no exporta nada, necesitarás esta línea. De lo contrario, bórrala */export {};