2015-11-10 2 views
1

У меня проблема с TypeScript. У меня есть модуль, где я определил два класса (я дам код ниже). Я не могу получить доступ к другому классу, внутри первого и наоборот. Что я делаю не так?Тип: Как обратиться к другому классу в том же модуле?

Вот мой код:

module Model { 

    export class Model { 
     public apples:Apple[]; 


     getAppleCnt() { 
      return this.model.apples.length; 
     } 

     createApple(){ 
      var index = this.model.apples.getAppleCnt()+1; 
      return this.model.apples.push(Apple.createApple("Apple "+index,index)); 
     } 

     createApples(){ 
      this.model = new Model(); 
      this.model.apples.=[]; 
     } 


    } 

    export class Apple { 
     createApple(name:string,index:number){ 
      var apple = new Apple(); 
      apple.name = name; 
      apple.index = index; 
      return apple; 
     } 
    } 
} 

ответ

1

Мы должны либо создать экземпляр Apple, или вызвать статический метод:

module Model { 

    export class Model { 
     protected model: Model; 
     public apples:Apple[]; 

     getAppleCnt() { 
      return this.model.apples.length; 
     } 

     createApple(){ 
      var index = this.model.apples.length + 1; 
      // instance 
      var apple = new Apple().createApple("Apple "+index,index); 
      // or call some static method 
      apple = Apple.createAppleStatic("Apple "+index,index); 
      return apple; 
     } 

     createApples(){ 
      this.model = new Model(); 
      this.model.apples = []; 
     } 
    } 

    export class Apple { 
     public name: string; 
     public index: number; 

     createApple(name:string,index:number){ 
     var apple = new Apple(); 
     apple.name = name; 
     apple.index = index; 
     return apple; 
    } 
    // the same as above but static one 
    static createAppleStatic(name:string,index:number){ 
     var apple = new Apple(); 
     apple.name = name; 
     apple.index = index; 
     return apple; 
    } 
    } 
} 

Там есть a working playground example

+0

Может у ou объясните мне, что именно означает статический атрибут? – uksz

+0

Как и в C# или Java .. static означает, что этот метод не принадлежит экземпляру, а типу. Мы можем назвать это с помощью синтаксиса typeName.publicStaticMehtod ... как показано выше, надеюсь, что это немного поможет .. проверьте этот общий https://en.wikipedia.org/wiki/Static_method –

+0

Да! Это проясняет все! Благодаря! – uksz

2

Вот один из способов сделать его:

module Model { 

    export class Model { 
     public apples: Apple[]; 


     getAppleCnt() { 
      return this.apples.length; 
     } 

     createApple() { 
      var index = this.getAppleCnt() + 1; 
      return this.apples.push(Apple.createApple("Apple " + index, index)); 
     } 

     createApples() { 
      this.apples = []; 
     } 


    } 

    export class Apple { 
     name: string; 
     index: number; 
     static createApple(name: string, index: number) { 
      var apple = new Apple(); 
      apple.name = name; 
      apple.index = index; 
      return apple; 
     } 
    } 
} 
+0

Это хорошо работает, однако я дам кредит @Radim, поскольку он был первым :( – uksz

+0

Btw - отличная книга! – uksz

+0

Спасибо за комментарий к книге. И хороший выбор с выбором @ RadimKöhler – basarat

Смежные вопросы