我想使用依赖注入来交换提供者的实现,但不知道如何使该类型安全。
@Injectable()
class ExampleService {
exampleMethod(): string {
return 'test';
}
}
// Note that this service does not implement the `exampleMethod` that the component will need.
@Injectable()
class SomeOtherService {
someOtherMethod(): number {
return 0;
}
}
// Using Angular dependency injection this causes runtime errors because type safety
// is lost. Any injectable class can be injected via `useClass` even if the services are
// completely different.
@Component({
providers: [
{ provide: ExampleService, useClass: SomeOtherService }
]
})
export class ExampleComponent {
constructor(private service: ExampleService) {
service.exampleMethod();
}
}
我可以创建两个服务都实现的抽象类,但无法强制执行,因为其他人可以创建服务并在不使用该抽象服务的情况下注入它。
有没有办法使用 Angular 依赖注入来触发编译时错误?我想防止上面示例中发生的运行时错误。
解决我的担忧的潜在解决方法:https ://github.com/tygern/safe-provide