2012-12-11 3 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(); 

동일한 변수를 사용하는 여러 가지 일반적인 규칙은 모두 여기에 적용됩니다. 호출 코드에서 특정 이벤트 순서를 적용하지 않으려 고합니다. 당신은 정적 그 속성을 정의하기 위해, 다음과 같이 쉽게 액세스 할 수 있습니다 필요

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

여전히 최신 버전의 타이프립트에서 작동합니까? ... – Kyle

+0

TypeScript 0.9.x 용으로 업데이트했습니다 – Fenton

+0

비교 용 컴파일 된 js를 추가했습니다 –