Je me demande s'il existe un moyen approprié d'injecter des interfaces dans Angular2 ? (cf. ci-dessous)
Je pense que cela est lié à l'absence du décorateur @Injectable() sur l'interface, mais il semble que cela ne soit pas autorisé.
Regards.
Lorsque CoursesServiceInterface est implémenté en tant qu'interface, le compilateur TypeScript se plaint de "CoursesServiceInterface cannot find name" :
import {CoursesServiceInterface} from './CoursesService.interface';
import {CoursesService} from './CoursesService.service';
import {CoursesServiceMock} from './CoursesServiceMock.service';
bootstrap(AppComponent, [
ROUTER_PROVIDERS,
GlobalService,
provide(CoursesServiceInterface, { useClass: CoursesServiceMock })
]);
mais avec CoursesServiceInterface comme interface :
import {Injectable} from 'angular2/core';
import {Course} from './Course.class';
//@Injectable()
export interface CoursesServiceInterface {
getAllCourses(): Promise<Course[]>;//{ return null; };
getCourse(id: number): Promise<Course>;// { return null; };
remove(id: number): Promise<{}>;// { return null; };
}
Lorsque le service est une classe, le compilateur TypeScript ne se plaint plus :
import {Injectable} from 'angular2/core';
import {Course} from './Course.class';
@Injectable()
export class CoursesServiceInterface {
getAllCourses() : Promise<Course[]> { return null; };
getCourse(id: number) :Promise<Course> { return null; };
remove (id: number) : Promise<{}> { return null; };
}