TypeScript - 导出和导入模块 [英] TypeScript - Export and import modules

查看:179
本文介绍了TypeScript - 导出和导入模块的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

好的,这是我的档案:

memberDB.ts

memberDB.ts

module MemberDB {
    interface Member {
        name: string;
        age: number;
        hobbies: string[];
    }

    class Database {
        private members: Member[];

        constructor(first ? : Member) {
            this.add(first);
        }

        add(member: Member) {
            this.members.push(member);
        }

        logMembers() {
            for (var member in this.members) {
                console.log(member);
            }
        }
    }
}

app .js

///<reference path="memberDB.ts"/>
var db = MemberDB.Database;
var Frank = {
    name: "Frank Arne",
    age: 38,
    hobbies: ['Baking', 'Swimming']
}

db.add(Frank);
db.logMembers();

当我尝试使用node运行app.js时,我收到此错误:

When I try to run app.js with node, I get this error:

/Users/.../js/app.js:2
var db = new MemberDB.Database;
         ^
ReferenceError: MemberDB is not defined
at Object.<anonymous> (/Users/.../js/app.js:2:14)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)
at node.js:906:3

我想在其自己的文件(memberDB.ts)中将MemberDB逻辑与app.js分开。然后导入并使Database对象做一些工作。如何才能做到这一点?我也试过 import db = require('memberDB)'; ,没有运气。

I want to separate the the MemberDB logic from app.js in its own file (memberDB.ts). Then import and make a Database object to do some work with. How can this be done? I've also tried to import db = require('memberDB)';, without luck.

谢谢! :D

推荐答案

您的代码有两个问题:

a。 )您使用内部模块错误。您需要 export 才能将它们添加到模块中。大卫的回答解释了这一点。但更重要的是,为什么这个答案在这里:

a.) You are using internal modules wrong. You need to export for them to get added to the module. This is explained by David's answer. But more importantly and why this answer is here:

b。)使用时,您不需要使用内部模块 commonjs

b.) you don't need to use internal modules when working with commonjs:

您的代码应为:

memberDB.ts:

memberDB.ts:

export interface Member {
    name: string;
    age: number;
    hobbies: string[];
}

export class Database {
    private members: Member[];

    constructor(first ? : Member) {
        this.add(first);
    }

    add(member: Member) {
        this.members.push(member);
    }

    logMembers() {
        for (var member in this.members) {
            console.log(member);
        }
    }
}

和他们导入/ require 在app.ts中:

and them import/require it in app.ts:

import memberDB = require('./memberDB');
var db = new memberDB.Database();
var Frank = {
    name: "Frank Arne",
    age: 38,
    hobbies: ['Baking', 'Swimming']
}

db.add(Frank);
db.logMembers();

注意我还修复了 db = new memberDB.Database(); 对于你,你需要调用构造函数。

Notice I also fixed up db = new memberDB.Database(); for you i.e. you need to call the constructor function.

有关内部模块与外部模块的更多信息: https://www.youtube.com/watch?v=KDrWLMUY0R0&hd=1

More about internal vs. external modules : https://www.youtube.com/watch?v=KDrWLMUY0R0&hd=1

这篇关于TypeScript - 导出和导入模块的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆