TypeScript - 导出和导入模块
TypeScript - Export and import modules
好的,这是我的文件:
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();
当我尝试使用节点 运行 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
您在界面和 class 上都缺少 export
关键字。
使 class and/or 接口在模块外部可见。您需要这样定义它:
module MemberDB {
export interface Member {
...
}
export class Database {
...
}
}
您的代码有两个问题:
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);
}
}
}
他们import/require它在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
好的,这是我的文件:
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();
当我尝试使用节点 运行 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
您在界面和 class 上都缺少 export
关键字。
使 class and/or 接口在模块外部可见。您需要这样定义它:
module MemberDB {
export interface Member {
...
}
export class Database {
...
}
}
您的代码有两个问题:
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);
}
}
}
他们import/require它在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