2015-03-07 3 views
0

Ok, это мои файлы:Машинопись - модули экспорта и импорта

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 

Я хочу sep arate логика MemberDB из app.js в собственном файле (memberDB.ts). Затем импортируйте и создайте объект базы данных, чтобы выполнить некоторую работу. Как это может быть сделано? Я тоже пытался import db = require('memberDB)';, без везения.

Спасибо! : D

ответ

0

Ваш код имеет два вопроса:

а) Вы используете внутренние модули неправильно.. Для этого вам нужно добавить export, чтобы добавить его в модуль. Это объясняется ответом Дэвида. Но что более важно, и почему этот ответ здесь:

б) вы не должны использовать внутренние модули при работе с 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

0

Вам не хватает ключевого слова export и на интерфейсе, и на классе. Для отображения класса и/или интерфейса вне модуля. Вам нужно определить это так:

module MemberDB { 
    export interface Member { 
     ... 
    } 

    export class Database { 
     ... 
    } 
} 
Смежные вопросы