Créer une variable globale à la Machine
En JavaScript, je peux faire ça:
something = 'testing';
Et puis dans un autre fichier:
if (something === 'testing')
et il aura something
être défini (tant qu'ils ont été appelés dans le bon ordre).
Je n'arrive pas à comprendre comment le faire à la Machine.
C'est ce que j'ai essayé.
Dans un .d.ts fichier:
interface Window { something: string; }
Alors dans ma main.ts fichier:
window.something = 'testing';
puis dans un autre fichier:
if (window.something === 'testing')
Et cela fonctionne. Mais je veux être en mesure de perdre la window.
partie, et seulement ma something
être global. Est-il un moyen de le faire à la Machine?
(Au cas où quelqu'un est intéressé, je suis vraiment essayer de configurer mon enregistrement pour mon application. Je veux être en mesure d'appeler log.Debug
à partir de n'importe quel fichier sans avoir à importer et créer des objets.)
Vous devez vous connecter pour publier un commentaire.
Ok, donc c'est sans doute encore plus laid que ce que vous avez fait, mais de toute façon...
mais je fais la même chose donc...
Ce que vous pouvez faire pour le faire dans le plus pur Tapuscrit, est d'utiliser le
eval
fonction de la façon :Et plus tard, vous serez en mesure de faire
Ce n'est rien de plus qu'un hack pour forcer l'exécution de l'instruction, sans Tapuscrit refusant de le compiler, et nous
declare var
pour Tapuscrit pour compiler le reste du code..d.ts
fichier de définition de la place.export declare const SERVER = "10.1.1.26";
À l'intérieur d'un
.d.ts
fichier de définition deSi vous travaillez dans le navigateur,
vous ajoutez des membres à la fenêtre du navigateur contexte:
Même idée pour NodeJS:
Maintenant vous déclarer la racine de la variable (qui vivent sur la fenêtre ou global)
Puis dans un
.ts
fichier, mais importées comme effet secondaire, vous avez réellement la mettre en œuvre:Et enfin l'utiliser ailleurs dans le code, soit avec:
.ts
fichiers, mais lorsque j'utilisewindow.myGlobalFunction
dans mon.tsx
fichiers, il ne le fait pas. De quoi dois-je changer?!J'ai trouvé un moyen qui fonctionne si j'utilise JavaScript combiné avec des caractères d'imprimerie.
de journalisation.d.ts:
journal-déclaration.js:
initalize-app.ts
Cela le place dans la portée globale et Tapuscrit sait à ce sujet. Donc je peux l'utiliser dans tous mes fichiers.
REMARQUE: je pense que cela ne fonctionne que parce que j'ai la
allowJs
Tapuscrit option est définie à true.Si quelqu'un poste une pure Tapuscrit solution, je vais l'accepter.
declare var log: any;
, Alors vous n'avez pas besoin d'avoir de la d.fichier ts ou le fichier js. Vous pouvez remplacer tout avec un type ou une définition d'interface ainsi.im en utilisant uniquement cette
Comme un addon pour Dima V la réponse c'est ce que j'ai fait pour faire ce travail pour moi.
//First declare the window global outside the class
declare let window: any;
//Inside the required class method
let globVarName = window.globVarName;