2014-11-16 2 views
2

typescript 프로젝트의 모듈러 구조를 설정하려고합니다. 나는 다른 폴더에있는 모듈을 가질 수 있고 그 모듈에 속한 모든 클래스를 별도의 파일에 포함 할 수 있도록 구조화하려고합니다. 내 모든 페이지에 대한 뷰 모듈 역할을 할 모듈을 작업 중입니다. 이 모듈에는 일반적인 페이지 뷰 기능이 포함 된 baseviewmodel과 내 페이지를 렌더링하기 위해 녹아웃과 함께 사용되는 pageviewmodel이 있습니다.requirejs가있는 typescript 모듈, 모듈을 확장하는 동안 정의되지 않은 프로토 타입

이 같은 모습을 달성하고자하는 구조 :

- ts folder 

    ViewModule 
     - BaseViewModel.ts 
     - PageViewModel.ts (extends BaseViewModel) 

    - init.ts 

이 BaseViewmodel 및 PageviewModel 모두 ViewModule에 속하지만, 별도의 파일입니다.

module ViewModule { 

    export class BaseViewmodel { 
     // .... 
    } 
} 
module ViewModule { 
    export class PageViewModel extends BaseViewmodel { 

     public content: KnockoutObservable<string>; 

     constructor(ko: KnockoutStatic) { 
      super(ko); 

      this.content = this.ko.observable(''); 
     } 

    } 
} 
내가 requirejs과 종속성을 내 응용 프로그램을 초기화하고 주입 init.ts를 사용

define(['app/ViewModule/PageViewModel'], 
    (viewModule: typeof ViewModule.PageViewModel) => { 
      console.log(viewModule); 
    }); 

내가 앱 '으로 pageviewmodel 모듈을로드하려고 볼 수 있듯이/ViewModule/PageViewModel '을 참조하십시오. 내가 직면하고 문제는 var에 viewModule 항상 정의되지이다 콘솔은 다음과 같은 오류 날 다시 제공 :

catch되지 않은 형식 오류 : pageviewmodel.js 라인에 정의되지 않은 재산 '프로토 타입'을 읽을 수 없습니다 4

컴파일 pageviewmodel을 (오류를 제공하는 것은) 다음과 같습니다

내가 타이프에서 할 수 없습니다 일을하지만 난 누락하지 않도록 어떤 메신저하려고 같은 느낌
var __extends = this.__extends || function (d, b) { 
    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; 
    function __() { this.constructor = d; } 
    __.prototype = b.prototype; // uncaught TypeError: Cannot read property 'prototype' of undefined 
    d.prototype = new __(); 
}; 
var ViewModule; 
(function (ViewModule) { 
    var PageViewModel = (function (_super) { 
     __extends(PageViewModel, _super); 
     function PageViewModel(ko) { 
      _super.call(this, ko); 

      this.content = this.ko.observable(''); 
     } 
     return PageViewModel; 
    })(ViewModule.BaseViewmodel); 
    ViewModule.PageViewModel = PageViewModel; 
})(ViewModule || (ViewModule = {})); 
//# sourceMappingURL=PageViewModel.js.map 

. 나는 정말로 모듈 클래스를 위해 별도의 파일을 사용하고 싶지만 타이프 스크립트가 이것을 허용하지 않는다고 생각하기 시작했다.

모듈 옵션이 'amd'로 설정된 Grunt-ts로 ts 파일을 컴파일하고 있지만 아무 것도 작동하지 않는 것 같습니다. 누군가가 나를 도울 수 있다면 나와 오른쪽 경로에 메신저 또는 그 위대한 것입니다 말해!

답변

3

I feel like i am trying to do something that is not possible in typescript but im not sure what i'm missing. I would really like to use seperate files for my module classes but im beginning to believe typescript does not allow this.

있습니다. 외부 모듈을 사용해야합니다. 즉

class BaseViewmodel { 
    // .... 
} 

export = BaseViewmodel; 

import BaseViewmodel = require('./BaseViewmodel'); 
export class PageViewModel extends BaseViewmodel { 

    public content: KnockoutObservable<string>; 

    constructor(ko: KnockoutStatic) { 
     super(ko); 

     this.content = this.ko.observable(''); 
    } 

} 

더 : https://www.youtube.com/watch?v=KDrWLMUY0R0&hd=1

관련 문제