2012-12-11 15 views
21

コンパイルエラーなしで、モジュール内でグローバル変数にアクセスできる便利な方法がありますか?つまり、CANVAS_WIDTHは以下のように使用されていますか?Typescriptグローバル変数

export class Bullet { 


     x: number = 22; 
     y: number = 22; 

     constructor (speed: number) { 
      this.xVelocity = speed; 
     } 

     inBounds() { 
      return this.x >= 0 && this.x <= CANVAS_WIDTH && 
       this.y >= 0 && this.y <= CANVAS_HEIGHT; 
     }; 
} 
} 
+0

ここでCANVAS_WIDTHの値を設定しますか? –

+0

は、Bulletクラスでモジュールをインポートするゲームクラスにあります。GameObjects = module( "GameObjects") – Nikos

+1

GameクラスにはCANVAS_WIDTHがあり、Bulletクラスにアクセスする必要があります。私は正しい? –

答えて

24

、その後、あなたはこのように簡単にアクセスすることができ、

export class Game { 
    static canvas: JQuery; 
    static CANVAS_WIDTH: number; 
    static CANVAS_HEIGHT: number; 
    bullet: Bullet; 

    constructor(canvasElem: JQuery) { 
     Game.canvas = canvasElem; 
     Game.CANVAS_WIDTH = Game.canvas.width(); 
     Game.CANVAS_HEIGHT = Game.canvas.height(); 
    } 
} 

export class Bullet { 
    x: number = 22; 
    y: number = 22; 

    public inBounds() { 
     // accessing static properties 
     return this.x >= 0 && this.x <= Game.CANVAS_WIDTH && this.y >= 0 && this.y <= Game.CANVAS_HEIGHT; 
    } 
} 

これはにコンパイル:

define(["require", "exports"], function(require, exports) { 
    var Game = (function() { 
     function Game(canvasElem) { 
      Game.canvas = canvasElem; 
      Game.CANVAS_WIDTH = Game.canvas.width(); 
      Game.CANVAS_HEIGHT = Game.canvas.height(); 
     } 
     return Game; 
    })(); 
    exports.Game = Game; 

    var Bullet = (function() { 
     function Bullet() { 
      this.x = 22; 
      this.y = 22; 
     } 
     Bullet.prototype.inBounds = function() { 
      // accessing static properties 
      return this.x >= 0 && this.x <= Game.CANVAS_WIDTH && this.y >= 0 && this.y <= Game.CANVAS_HEIGHT; 
     }; 
     return Bullet; 
    })(); 
    exports.Bullet = Bullet; 
}); 
//# sourceMappingURL=dhdh.js.map 
+0

これは役に立ちます。それが役に立ったら答えとして受け入れてください。 –

+0

助けてくれてありがとう! – Nikos

+1

は、コンパイル済みのJSファイル –

2

これは不自然な例ですが、むしろグローバルスコープにプッシュしようとするよりも、あなたには、いくつかのクラスから使用される変数を囲むために、モジュールのスコープを使用することができます。

module MyModule { 
    var x: number = 5; 

    export class FirstClass { 
     doSomething() { 
      x = 10; 
     } 
    } 

    export class SecondClass { 
     showSomething() { 
      alert(x.toString()); 
     } 
    } 
} 

var a = new MyModule.FirstClass(); 
a.doSomething(); 

var b = new MyModule.SecondClass(); 
b.showSomething(); 

ここでは、同じ変数を使用する複数のものについての通常の規則がすべて適用されます。コールするコードに特定の順序のイベントを強制したくない場合。


にコンパイル:あなたはstaticとしてこれらのプロパティを定義する必要が

var MyModule; 
(function (MyModule) { 
    var x = 5; 

    var FirstClass = (function() { 
     function FirstClass() { 
     } 
     FirstClass.prototype.doSomething = function() { 
      x = 10; 
     }; 
     return FirstClass; 
    })(); 
    MyModule.FirstClass = FirstClass; 

    var SecondClass = (function() { 
     function SecondClass() { 
     } 
     SecondClass.prototype.showSomething = function() { 
      alert(x.toString()); 
     }; 
     return SecondClass; 
    })(); 
    MyModule.SecondClass = SecondClass; 
})(MyModule || (MyModule = {})); 

var a = new MyModule.FirstClass(); 
a.doSomething(); 

var b = new MyModule.SecondClass(); 
b.showSomething(); 
+0

これはまだ最新のtypescriptで動作しますか?これはコンパイルの例では表示されません... – Kyle

+0

TypeScript 0.9.xのためにこれを更新しました – Fenton

+0

コンパイル済みのjsを追加しました –

関連する問題