问题描述
目前,我正在试图清理一些code,以程序对接口而不是对实现,但不能弄清楚如何。
要更具体,我使用:
*打字稿1.5.0测试版 - > transpiled到ES5 / CommonJS的
* SystemJS加载模块
我目前尝试使用外部模块如下:
posts.service.ts文件:
///<参考路径=../../../分型/ tsd.d.ts/>
///<参考路径=../../../分型/ typescriptApp.d.ts/>
...
导出接口PostsService {// 1
fetchPosts():Rx.Observable<任何取代;
}
出口VAR PostsService:PostsServiceImpl; // 2
...
出口类PostsServiceImpl实现PostsService {// 3
...
构造函数(){
的console.log('载入帖子服务');
}
...
fetchPosts():Rx.Observable<&任何GT; {
...
}
和该模块在posts.ts输入:
///<参考路径=../../../分型/ tsd.d.ts/>
///<参考路径=../../../分型/ typescriptApp.d.ts/>进口{PostsService,PostsServiceImpl}从组件/职位/ posts.service';
@Component({
选择:'帖子',
viewInjector:
// PostsServiceImpl
// PostsService
绑定(PostsService).toClass(PostsServiceImpl)
]
})
...
出口类职位{
私人postsServices:PostsService;
构造函数(postsService:PostsService){
的console.log('载入帖子组件');
this.postsServices = postsService;
...
}...
}
以上code编译正确,但基本上我的问题可以归结为一个事实,即角不会在帖子组件注入PostsServiceImpl的一个实例。
当然,这只是因为我没有找到申报/导出正确的方法/导入所有
没有导出接口PostsService ...
,我得到TS编译错误,因为我在posts控制器使用它。
没有出口VAR PostsService:PostsServiceImpl;
我得到了@View装饰的viewInjector TS编译错误
在生成的JS code,我只找到<$ C $ C> exports.PostsService; 这是因为出口变种增加......我知道,接口在运行时消失。
所以我在这一切有点失落。任何实际想法如何,我可以使用基于接口的编程瓦特/打字稿及放大器;角2?
Interfaces are erased at runtime. In fact decorators don't support interfaces either. So you are better off using something that does exist at runtime (i.e. implementations).
这篇关于基于接口编程打字稿,角2及SystemJS的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!