我刚刚开始看看打字稿并在玩游戏时遇到问题 我想编写一个库来管理一般的树结构,只是做一些非常基本的测试来看看TS是如何工作的。
使用3个文件开始简单设置:
目前,GForest.ts:
import * as Immutable from "immutable";
import GTree from "./GTree";
export default class Forest{
public static createTree(){
let tree = new GTree();
}
}
GTree.ts:
export default class GTree{
constructor(){
console.log("Tree constructed");
}
public static createNode(){
}
}
我创建了一个简单的test.js文件来调用库(编译TS到ES5):
var GForest = require("./build/GForest");
console.log(GForest);
运行时
> node test
输出结果为:
我不明白为什么结果是:
{ default: { [Function: Forest] createTree: [Function] } }
为什么有default
为对象的对象,如何更改此对象以实现所需的行为?
因此,我无法打电话:
GForest.createTree();
(我希望通过静态工厂公开树的创建) 有帮助吗?
答案 0 :(得分:2)
default
导出我引用了Mozilla的文章ES6 In Depth: Modules:
如果您希望自己的ES6模块具有默认导出功能,那么这很容易实现。默认导出没有什么神奇之处;它就像任何其他导出一样,除了名为
"default"
。
在test.js
文件中,“默认”功能不够优雅,因为您希望使用ES5语法中的ES6 default
导出。我建议在TypeScript的帮助下使用ES6语法:
// test.ts
import GForest from "./build/GForest";
console.log(GForest); // { [Function: Forest] createTree: [Function] }
此代码编译为:
var GForest_1 = require("./build/GForest");
console.log(GForest_1.default);
在TypeScript中,您可以使用非标准语法export =
直接导出成员。
示例:
// GForest.ts
import * as Immutable from "immutable";
import GTree from "./GTree";
class Forest{
public static createTree(){
let tree = new GTree();
}
}
export = Forest;
然后,将其与代码ES3 / 5一起使用:
// test.js
let GForest = require("./build/GForest");
console.log(GForest); // { [Function: Forest] createTree: [Function] }
...或者,在TypeScript中:
// test.ts
import GForest = require("./build/GForest");
console.log(GForest); // { [Function: Forest] createTree: [Function] }
答案 1 :(得分:1)
为什么有一个默认为键的对象,如何将其更改为 实现理想的行为?
那是因为它是从编译的GForest.js
导出的内容:
"use strict";
var GTree_1 = require("./GTree");
var Forest = (function () {
function Forest() {
}
Forest.createTree = function () {
var tree = new GTree_1["default"]();
};
return Forest;
}());
exports.__esModule = true;
exports["default"] = Forest;
您需要使用.default
来引用构造函数:
var GForest = require("./build/GForest").default;
Typescript使用es6
模块语法,可以导出多个模块。然后将此代码编译为commonjs
es5
模块语法。 Typescript编译器使用properties
对象上的exports
映射在es6
模块语法上定义的多个导出。 default
就像任何其他named
导出一样。