基于接口编程打字稿

基于接口编程打字稿

本文介绍了基于接口编程打字稿,角2及SystemJS的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

目前,我正在试图清理一些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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-13 05:09