example - Crear una variable global en TypeScript
typescript undefined (5)
En JavaScript, puedo hacer esto:
something = ''testing'';
Y luego en otro archivo:
if (something === ''testing'')
y tendrá something
definido (siempre que se los llame en el orden correcto).
Parece que no puedo entender cómo hacerlo en TypeScript.
Esto es lo que he intentado.
En un archivo .d.ts:
interface Window { something: string; }
Luego en mi archivo main.ts:
window.something = ''testing'';
luego en otro archivo:
if (window.something === ''testing'')
Y esto funciona Pero quiero poder perder la window.
parte de eso y solo quiero que mi something
sea global. ¿Hay alguna manera de hacerlo en TypeScript?
(En caso de que alguien esté interesado, realmente estoy tratando de configurar mi logging para mi aplicación. Quiero poder invocar log.Debug
desde cualquier archivo sin tener que importar ni crear objetos).
Como un complemento a la respuesta de Dima V, esto es lo que hice para que esto funcione para mí.
// First declare the window global outside the class
declare let window: any;
// Inside the required class method
let globVarName = window.globVarName;
De acuerdo, entonces esto probablemente sea incluso más feo que lo que hiciste, pero de todos modos ...
pero yo hago lo mismo, así que ...
Lo que puede hacer para hacerlo en TypeScript puro, es usar la función eval
como sigue:
declare var something: string;
eval("something = ''testing'';")
Y luego podrás hacer
if (something === ''testing'')
Esto no es más que un truco para forzar la ejecución de la instrucción sin que TypeScript se rehúse a compilar, y declare var
para TypeScript para compilar el resto del código.
Dentro de un archivo de definición .d.ts
type MyGlobalFunctionType = (name: string) => void
Si trabajas en el navegador, agregas miembros al contexto de la ventana del navegador:
interface Window {
myGlobalFunction: MyGlobalFunctionType
}
La misma idea para NodeJS:
declare module NodeJS {
interface Global {
myGlobalFunction: MyGlobalFunctionType
}
}
Ahora declaras la variable raíz (que realmente vivirá en la ventana o global)
declare const myGlobalFunction: MyGlobalFunctionType;
Luego, en un archivo .ts
regular, pero importado como efecto secundario, en realidad lo implementa:
global/* or window */.myGlobalFunction = function (name: string) {
console.log("Hey !", name);
};
Y finalmente utilícelo en otra parte de la base de código, con:
global/* or window */.myGlobalFunction("Kevin");
myGlobalFunction("Kevin");
Encontré una manera que funciona si uso JavaScript combinado con TypeScript.
logging.d.ts:
declare var log: log4javascript.Logger;
declaración de registro. js :
log = null;
initalize-app.ts
import ''./log-declaration.js'';
// Call stuff to actually setup log.
// Similar to this:
log = functionToSetupLog();
Esto lo coloca en el ámbito global y TypeScript lo sabe. Entonces puedo usarlo en todos mis archivos.
NOTA: Creo que esto solo funciona porque tengo la opción allowJs
TypeScript establecida en verdadero.
Si alguien publica una solución pura de TypeScript, lo aceptaré.
estoy usando solo esto
import {globalVar} from "./globals";
declare let window:any;
window.globalVar = globalVar;