En utilisant TypeScript 0.9.1.1, lorsque vous essayez d'accéder à une variable statique à partir d'un autre module/fichier, il est indéfini.TypeScript: utilisation de variables statiques avec RequireJS AMD
code Exemple:
App.ts:
import Game = require('Game');
var game = new Game();
Game.ts:
import Grid = require('Grid');
class Game
{
public Grid: Grid;
public static Game: Game;
constructor()
{
Game.Game = this;
this.Grid = new Grid();
this.Grid.SeeIfStaticWorks();
}
}
export = Game;
Grid.ts:
import Game = require('Game');
class Grid
{
public SeeIfStaticWorks()
{
var shouldNotBeUndefined = Game.Game;
}
}
export = Grid;
Contrôle Game.Game
avant d'appeler this.Grid.SeeIfStaticWorks();
montre qu'il est défini:
Mais en essayant d'y accéder à l'intérieur SeeIfStaticWorks()
est indéfini:
La question est: Comment être capable d'accéder à des variables statiques d'autres modules?
Mise à jour:
Courir tout le code d'un fichier permet d'utiliser la variable statique entre les modules (demo here):
class Grid
{
public SeeIfStaticWorks()
{
console.log(Game.Game);
if (Game.Game)
alert('Instance is defined!');
else
alert('Instance is undefined!');
}
}
class Game
{
public Grid: Grid;
private static game : Game;
public static get Game() : Game
{
if (this.game == null)
{
this.game = new Game();
}
return this.game;
}
constructor()
{
this.Grid = new Grid();
}
}
var game = Game.Game;
game.Grid.SeeIfStaticWorks();
Si j'utilise la même logique avec AMD RequireJS la variable statique non définie lors de l'appel SeeIfStaticWorks()
:
App.ts:
import Game = require('Game');
var game = Game.Game;
game.Grid.SeeIfStaticWorks();
Game.ts:
import Grid = require('Grid');
class Game
{
public Grid: Grid;
private static game : Game;
public static get Game() : Game
{
if (this.game == null)
{
this.game = new Game();
}
return this.game;
}
constructor()
{
this.Grid = new Grid();
}
}
export = Game;
Grid.ts:
import Game = require('Game');
class Grid
{
public SeeIfStaticWorks()
{
console.log(Game.Game);
if (Game.Game)
alert('Instance is defined!');
else
alert('Instance is undefined!');
}
}
export = Grid;
Cela ne fonctionnera pas non plus parce que 'SeeIfStaticWorks()' serait exécuté avant que Game.Game' ne soit instancié. J'ai posté une mise à jour à la question avec un code plus proche de ce que je pourrais utiliser. Le problème semble être lié à RequireJS. Nice AngularJs/TS vidéos btw :) –
Puisqu'il ne fonctionne pas de cette façon, pourriez-vous s'il vous plaît supprimer la réponse? Cela aiderait à obtenir une réponse correcte plus rapidement. –
voir mon autre réponse – basarat