Pytanie Globalne zmienne maszynopisowe


Czy istnieje wygodny sposób na udostępnienie zmiennych globalnych w ramach modułów, bez błędów kompilatora, tj. Poniżej użytego parametru CANVAS_WIDTH?

    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;
        };
}
}

21
2017-12-11 11:22


pochodzenie


gdzie ustawisz wartość CANVAS_WIDTH? - Rajagopal 웃
w klasie gry, która importuje moduł z klasą Bullet GameObjects = module ("GameObjects") - Nikos
Masz CANVAS_WIDTH w klasie Game i potrzebujesz dostępu do niej w klasie Bullet. Czy mam rację? - Rajagopal 웃
yip! To jest poprawne - Nikos


Odpowiedzi:


Musisz zdefiniować te właściwości jako statyczne, wtedy możesz uzyskać do nich dostęp w prosty sposób,

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;
    }
}

To kompiluje się do:

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

25
2017-12-11 15:09



Mam nadzieję, że ta pomaga. Zaakceptuj jako odpowiedź, jeśli pomaga. - Rajagopal 웃
dzięki kolego za pomoc! - Nikos
dodano skompilowany plik JS - Simon_Weaver
@Simon_Weaver dzięki za kod! - Nikos


Jest to przykładowy przykład, ale zamiast próbować przejść do zasięgu globalnego, można użyć zakresu modułu do objęcia zmiennej, która będzie używana z kilku klas.

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();

Używają tu wszystkich zwykłych reguł dotyczących wielu rzeczy używających tej samej zmiennej - nie chcesz wymuszać określonej kolejności zdarzeń na kodzie wywołującym.


Kompiluje do:

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();

2
2017-12-11 14:47



Czy to nadal działa w najnowszej wersji maszynopisu? Nie wygląda na to, że przykład kompiluje ... - Kyle
Zaktualizowałem to dla TypeScript 0.9.x - user75525
dodano skompilowane js dla porównania - Simon_Weaver