首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类型记录默认导出

类型记录默认导出
EN

Stack Overflow用户
提问于 2016-11-23 10:31:42
回答 2查看 3.3K关注 0票数 2

我刚开始看打字稿,在玩的时候有个问题。

我想编写一个库来管理一个通用的树结构,并且只是做一些非常基本的测试来了解TS是如何工作的。

启动3个文件的简单设置:

  • GForest.ts
  • GTree.ts
  • GNode.ts

目前,GForest.ts:

代码语言:javascript
复制
import * as Immutable   from "immutable"; 
import GTree            from "./GTree"; 

export default class Forest{ 
    public static createTree(){ 
        let tree = new GTree(); 
    } 
} 

GTree.ts:

代码语言:javascript
复制
export default class GTree{ 
    constructor(){ 
        console.log("Tree constructed"); 
    } 

    public static createNode(){ 

    } 
} 

我创建了一个简单的test.js文件来调用库(将TS编译成ES5):

代码语言:javascript
复制
var GForest = require("./build/GForest"); 

console.log(GForest); 

跑步时

代码语言:javascript
复制
> node test

产出如下:

我不明白为什么结果是:

代码语言:javascript
复制
{ default: { [Function: Forest] createTree: [Function] } }

为什么有一个以default为键的对象,以及如何更改它以实现所需的行为?

因为这个,我不能打电话:

代码语言:javascript
复制
GForest.createTree(); 

(我想通过静态工厂公开树的创建)有什么帮助吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-23 10:48:41

使用ES6 default导出

我引用Mozilla的文章深度ES6 :模块

如果您希望自己的ES6模块具有默认的导出,这很容易做到。默认导出没有什么神奇之处;它与任何其他导出一样,只是名为"default"

在您的test.js文件中,“默认”特性是不优雅的,因为您希望使用来自ES5语法的ES6 default导出。我建议在ES6的帮助下使用TypeScript语法:

代码语言:javascript
复制
// test.ts
import GForest from "./build/GForest";
console.log(GForest); // { [Function: Forest] createTree: [Function] }

此代码编译为:

代码语言:javascript
复制
var GForest_1 = require("./build/GForest"); 
console.log(GForest_1.default);

直接导出类

在TypeScript中,可以使用非标准语法export =直接导出成员。

示例:

代码语言:javascript
复制
// GForest.ts
import * as Immutable   from "immutable"; 
import GTree            from "./GTree"; 

class Forest{ 
    public static createTree(){ 
        let tree = new GTree(); 
    } 
}
export = Forest;

然后,将其与代码ES3/5一起使用:

代码语言:javascript
复制
// test.js
let GForest = require("./build/GForest");
console.log(GForest); // { [Function: Forest] createTree: [Function] }

..。或者,在TypeScript中:

代码语言:javascript
复制
// test.ts
import GForest = require("./build/GForest");
console.log(GForest); // { [Function: Forest] createTree: [Function] }

这里

票数 1
EN

Stack Overflow用户

发布于 2016-11-23 10:41:18

为什么有一个以默认值作为键的对象,我如何更改这个对象以实现所需的行为?

这是因为它是从编译后的GForest.js导出的

代码语言:javascript
复制
"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来引用构造函数:

代码语言:javascript
复制
var GForest = require("./build/GForest").default; 

类型记录使用es6模块语法,可以导出多个模块。然后将此代码编译为commonjs es5模块语法。类型记录编译器使用properties on exports对象映射在es6模块语法上定义的多个导出。default和任何其他named输出一样。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40761913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档