【发布时间】:2020-01-23 07:37:02
【问题描述】:
TypeScript 代码可以正确编译。但是(可能)由于我的类结构最终编译的结果与预期的不同。导致运行时错误。
导致错误本身的实际问题是
this.Scene = new THREE.Scene();
运行 tsc 后我得到了这一行
this.Scene = new three_1.default.Scene();
我可以删除默认参数并修复它。但每次都这样做似乎是个坏主意。我宁愿知道根本问题。 上下文类,以防它与我正在使用的结构有关。 提前抱歉,我对 typescript 比较陌生(一周前开始使用 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;
【问题讨论】:
-
为什么要使用不同的语法导入 THREE 和 Meshloader? THREE 是否定义了 __esModule?
-
嗯,简单的答案是我相信 VS Code 能够正确解释导入语法。我不知道 THREE 是否定义了 __esModule。这就是 Typescript 转译器把它变成的......值得注意的是,虽然我的前 2 个导入是我编写的自定义类,而三个不直接在我的项目中。
-
你使用的是 rollup 还是 webpack?
-
我现在正在使用 browsify。
标签: typescript visual-studio-code three.js