我刚开始看打字稿,在玩的时候有个问题。
我想编写一个库来管理一个通用的树结构,并且只是做一些非常基本的测试来了解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(); (我想通过静态工厂公开树的创建)有什么帮助吗?
发布于 2016-11-23 10:48:41
使用ES6 default导出
我引用Mozilla的文章深度ES6 :模块:
如果您希望自己的ES6模块具有默认的导出,这很容易做到。默认导出没有什么神奇之处;它与任何其他导出一样,只是名为
"default"。
在您的test.js文件中,“默认”特性是不优雅的,因为您希望使用来自ES5语法的ES6 default导出。我建议在ES6的帮助下使用TypeScript语法:
// 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] }见这里。
发布于 2016-11-23 10:41:18
为什么有一个以默认值作为键的对象,我如何更改这个对象以实现所需的行为?
这是因为它是从编译后的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; 类型记录使用es6模块语法,可以导出多个模块。然后将此代码编译为commonjs es5模块语法。类型记录编译器使用properties on exports对象映射在es6模块语法上定义的多个导出。default和任何其他named输出一样。
https://stackoverflow.com/questions/40761913
复制相似问题