Ich versuche zur Zeit einige Code, um aufzuräumen gegen Schnittstellen zu programmieren, anstatt gegen Implementierungen kann aber nicht herausfinden, wie.Schnittstelle basierte Programmierung mit Typoskript, Angular 2 & SystemJS
Um genauer zu sein, ich verwende: * Typoskript 1.5.0 Beta -> transpiled bis ES5/Commonjs * SystemJS die Module
zu laden ich versuchen derzeit externe Module wie folgt zu verwenden:
posts.service.ts Datei:
///<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>{
...
}
und das Modul in posts.ts importiert wird:
///<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;
...
}
...
}
Der obige Code kompiliert korrekt, aber im Grunde kocht mein Problem auf die Tatsache, dass Angular nicht eine Instanz von PostsServiceImpl in den Beiträgen Komponente injizieren.
Natürlich ist es einfach, weil ich zu erklären/Export nicht die richtige Art und Weise finden/importieren alles
Ohne export interface PostsService ...
, ich TS Kompilierungsfehlern bekommen, weil ich es in den Pfosten-Controller verwenden.
Ohne export var PostsService:PostsServiceImpl;
bekomme ich TS Kompilierungsfehlern in dem viewInjector des @View Dekorateur
Im generierten Code js ich nur exports.PostsService;
finden, die wegen des Exports var hinzugefügt wird ... Ich weiß, dass Schnittstellen zur Laufzeit verschwinden.
Also bin ich ein bisschen verloren in all dem. Irgendwelche praktischen Ideen, wie ich Schnittstelle basierte Programmierung w/TypeScript & Angular 2 verwenden kann?
Das sind traurige Nachrichten für mich ;-). Ich denke, ich sollte mich einfach anpassen und meine komplett typisierte Java-Welt vergessen. ^^ – dSebastien
Wie soll ich dann in meiner Anwendung die Entkopplung angehen? Ich bin noch nicht da, aber mein Ziel ist es, testbaren Code zu schreiben. Afaik, es gibt noch keine Unterstützung für abstrakte Klassen in TypeScript, oder? – dSebastien
Bald: https://github.com/Microsoft/TypeScript/pull/3579 – basarat