Скомпилированный JS из TypeScript не запускается в браузере - PullRequest
0 голосов
/ 23 сентября 2019

Код TypeScript компилируется правильно.Но (вероятно) из-за структуры моего класса компиляция отличается от ожидаемой.В результате ошибки во время выполнения.

Фактическая проблема, которая вызывает саму ошибку является

this.Scene = new THREE.Scene();

после запуска tsc Я получаю эту строку

this.Scene = new three_1.default.Scene();

Я могу просто удалитьпараметр по умолчанию и это исправляет.Но кажется плохой идеей делать это каждый раз.Я бы лучше знал основную проблему.Классы для контекста в случае, если это связано со структурой, которую я использую.Извините заранее, я относительно новичок в машинописи (и начал JS неделю назад, но у меня есть степень в .NET)

import { MaterialLibrary } from "./Materials/MaterialLibrary";
import { MeshLoader } from "./MeshLoader";
import THREE from "three";

export class Manager
{
    //manager instance
    private static instance: Manager;

    //sub-managers
    public static MaterialLib: MaterialLibrary;
    public static Scene: THREE.Scene;

    //helper classes
    public static MeshLoader: MeshLoader;

    constructor()
    {
        Manager.instance = this;
    }

    static Init()
    {
        this.MaterialLib = new MaterialLibrary();
        this.MeshLoader = new MeshLoader();
        this.Scene = new THREE.Scene();
    }

    static GetInstance(): Manager
    {
        if(!Manager.instance)
        {
            Manager.instance = new Manager();
        }

        return Manager.instance;
    }
}

И это компилируется в

"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const MaterialLibrary_1 = require("./Materials/MaterialLibrary");
const MeshLoader_1 = require("./MeshLoader");
const three_1 = __importDefault(require("three"));
class Manager {
    constructor() {
        Manager.instance = this;
    }
    static Init() {
        this.MaterialLib = new MaterialLibrary_1.MaterialLibrary();
        this.MeshLoader = new MeshLoader_1.MeshLoader();
        this.Scene = new three_1.default.Scene();
    }
    static GetInstance() {
        if (!Manager.instance) {
            Manager.instance = new Manager();
        }
        return Manager.instance;
    }
}
exports.Manager = Manager;

1 Ответ

0 голосов
/ 23 сентября 2019

попробуйте использовать

import * as THREE from 'three';

вместо

import THREE from 'three';

см .: https://threejs.org/docs/index.html#manual/en/introduction/Import-via-modules

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...