私は現在、実装ではなくインターフェイスに対してプログラムするためにいくつかのコードをクリーンアップしようとしていますが、その方法がわかりません。
より具体的には、以下を使用しています: * TypeScript 1.5.0 beta -> ES5 / commonjs にトランスパイル * SystemJS を使用してモジュールをロード
現在、次のように外部モジュールを使用しようとしています。
posts.service.ts ファイル:
///<reference path="../../../typings/tsd.d.ts" />
///<reference path="../../../typings/typescriptApp.d.ts" />
...
export interface PostsService{ // 1
fetchPosts(): Rx.Observable<any>;
}
export var PostsService:PostsServiceImpl; // 2
...
export class PostsServiceImpl implements PostsService { // 3
...
constructor(){
console.log('Loading the Posts service');
}
...
fetchPosts(): Rx.Observable<any>{
...
}
そのモジュールは posts.ts にインポートされます。
///<reference path="../../../typings/tsd.d.ts" />
///<reference path="../../../typings/typescriptApp.d.ts" />
import {PostsService, PostsServiceImpl} from 'components/posts/posts.service';
@Component({
selector: 'posts',
viewInjector: [
//PostsServiceImpl
//PostsService
bind(PostsService).toClass(PostsServiceImpl)
]
})
...
export class Posts {
private postsServices: PostsService;
constructor(postsService: PostsService) {
console.log('Loading the Posts component');
this.postsServices = postsService;
...
}
...
}
上記のコードは正しくコンパイルされますが、基本的に私の問題は、Angular が Posts コンポーネントに PostsServiceImpl のインスタンスを挿入しないという事実に要約されます。
もちろん、それは単に、すべてを宣言/エクスポート/インポートする正しい方法が見つからないためです
がないexport interface PostsService ...
と、投稿コントローラーで使用するため、TS コンパイル エラーが発生します。
@Viewexport var PostsService:PostsServiceImpl;
デコレータの viewInjector で TS コンパイル エラーが発生します。
生成されたjsコードexports.PostsService;
では、エクスポート変数のために追加されたものしか見つかりません...インターフェイスが実行時に消えることはわかっています。
だから私はこのすべてに少し迷っています。TypeScript & Angular 2 でインターフェースベースのプログラミングをどのように使用できるかという実用的なアイデアはありますか?