В настоящее время я пытаюсь очистить некоторый код, чтобы программировать против интерфейсов, а не от реализаций, но не могу понять, как это сделать.Программирование на основе интерфейса с использованием TypeScript, Angular 2 и SystemJS
Чтобы быть более конкретным, я использую: * машинопись 1.5.0 бета -> transpiled к 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 не будет вводить экземпляр PostsServiceImpl в компонент Posts.
Конечно, это просто потому, что не найти правильный способ объявления/экспорта/импорт всех
Без export interface PostsService ...
, я получаю ошибку компиляции TS, потому что я использую его в контроллере сообщений.
Без export var PostsService:PostsServiceImpl;
я получаю ошибку компиляции TS в @View декоратора viewInjector
В коде сгенерированного JS я только найти exports.PostsService;
, который добавляется из-за экспорт вара ... Я знаю, что интерфейсы исчезают во время выполнения.
Так что я немного потерял во всем этом. Любые практические идеи, как я могу использовать программирование на основе интерфейса w/TypeScript & Angular 2?
Это печальная новость для меня ;-). Наверное, я должен просто адаптироваться и забыть свой полностью типизированный мир Java. ^^ – dSebastien
Как мне подойти к развязке в моем приложении? Я еще не там, но моя цель - написать тестовый код. Afaik еще нет поддержки абстрактных классов в TypeScript, правильно? – dSebastien
Вскоре: https://github.com/Microsoft/TypeScript/pull/3579 – basarat