【问题标题】:TypeScript - Export and import modulesTypeScript - 导出和导入模块
【发布时间】:2015-05-08 23:22:33
【问题描述】:

好的,这是我的文件:

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 时,我收到此错误:

/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 分开。然后导入并制作一个数据库对象来做一些工作。如何才能做到这一点?我也试过import db = require('memberDB)';,没有运气。

谢谢! :D

【问题讨论】:

    标签: import module export typescript


    【解决方案1】:

    您的代码有两个问题:

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

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

    你的代码应该是:

    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);
            }
        }
    }
    

    他们在 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();,即您需要调用构造函数。

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

    【讨论】:

      【解决方案2】:

      您在接口和类上都缺少export 关键字。 使类和/或接口在模块外部可见。您需要像这样定义它:

      module MemberDB {
          export interface Member {
              ...
          }
      
          export class Database {
              ...
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2012-11-06
        • 2022-11-26
        • 2015-07-19
        • 1970-01-01
        • 1970-01-01
        • 2018-06-10
        • 1970-01-01
        • 2019-03-09
        相关资源
        最近更新 更多