Attualmente sto cercando di ripulire del codice per programmare contro interfacce anziché contro implementazioni ma non riesco a capire come.Programmazione basata sull'interfaccia con TypeScript, Angular 2 e SystemJS
Per essere più precisi, sto usando: * dattiloscritto 1.5.0 beta -> transpiled a ES5/commonjs * SystemJS di caricare i moduli
Attualmente cerco di utilizzare moduli esterni come segue:
il fileposts.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>{
...
}
e quel modulo viene importato in 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;
...
}
...
}
Il codice sopra riportato viene compilato correttamente, ma fondamentalmente il mio problema si riduce al fatto che Angular non inietterà un'istanza di PostsServiceImpl nel componente Post.
Certo che è semplicemente perché non trovo il modo corretto di dichiarare/export/importare tutto
Senza export interface PostsService ...
, ricevo errori di compilazione TS perché lo uso nel controller messaggi.
Senza export var PostsService:PostsServiceImpl;
ottengo gli errori di compilazione TS nel decoratore @View viewInjector
Nel codice generato js Ho solo trovato exports.PostsService;
che si aggiunge a causa del var esportazione ... So che le interfacce scompaiono in fase di esecuzione.
Quindi sono un po 'perso in tutto questo. Qualche idea pratica su come utilizzare la programmazione basata sull'interfaccia w/TypeScript & Angular 2?
Questa è una triste notizia per me ;-). Credo che dovrei solo adattare e dimenticare il mio mondo Java completamente digitato .. ^^ – dSebastien
Come dovrei quindi affrontare il disaccoppiamento nella mia applicazione? Non ci sono ancora, ma il mio obiettivo è scrivere un codice verificabile. Afaik non c'è ancora il supporto per le classi astratte in TypeScript, giusto? – dSebastien
Presto: https://github.com/Microsoft/TypeScript/pull/3579 – basarat