Typescript, нет событий «окна» при добавлении оператора импорта - PullRequest
0 голосов
/ 10 июля 2019

Так что я довольно новичок в машинописи, javascript и веб-шиззле (я обычно создаю нативные приложения).Но я экспериментирую с Phaser3 и использую VSCode с машинописью для переноса файлов javascript.Сначала я использовал пространства имен (фон C #), но, видимо, в машинописи это не так, поэтому я удалил пространства имен и использовал экспорт с соответствующими операторами импорта.

Проблема: у меня ушло некоторое время, чтобы выяснить,что мое оконное событие (window.onload) не запускается из-за импорта требуемого типа.Это событие является своего рода точкой входа в приложение.Предложения о других способах запуска проекта всегда приветствуются.Вот код:

window.onload НЕ ОГНЕТ:

import { Boot } from "./Boot";

window.onload = () => {
    console.log("Test");
    Boot.runApp();
}

После удаления «импорта» window.onload FIRES!

//import { Boot } from "./Boot";

window.onload = () => {
    console.log("Test");
    //Boot.runApp();
}

Boot.ts

imports...

export class Boot {
        static runApp() {
            console.log("RUN APP!!");
//Start the game... (code removed)

        }
}

Это мой tsconfig:

{
    "compileOnSave": true,
    "compilerOptions": {
        "target": "ES5",
        "module": "system",
        "sourceMap": false,
        "outDir": "bin/js/",
        "outFile": "bin/js/game.js"
    }, 

    "include": [
        "./src/**/*"
        ],

    "files":[
        "./tsDefinitions/nineslice.d.ts",
        "./tsDefinitions/phaser.d.ts"
    ]    
}

Есть идеи, почему он так себя ведет?Это немного раздражает, потому что это место запускает мой игровой код.Можно ли запустить функцию 'Boot.runApp ()' из тега в моем index.html?

1 Ответ

1 голос
/ 10 июля 2019

Когда вы import / export, вы создаете модуль.Вы используете SystemJS (module: system в вашем tsconfig).Модули обернуты в блоки системного регистра:

System.register("index", [], function (exports_2, context_2) {
    "use strict";
    var __moduleName = context_2 && context_2.id;
    return {
        setters: [],
        execute: function () {
            window.onload = function () {
                console.log("Test");
            };
        }
    };
});

Вам нужно запустить что-то вроде System.import('index.js');, чтобы запустить этот код.Если ваш файл машинописи не является модулем, window.onload помещается непосредственно в скомпилированный вывод, а не в System.register, что означает, что он будет немедленно выполнен при загрузке файла.

...