Я хотел бы использовать внедрение зависимостей для замены реализации провайдера, но не могу понять, как сделать этот тип безопасным.
@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();
}
}
Я мог бы создать абстрактный класс, который реализуют обе службы, нонет никакого способа обеспечить это, как кто-то другой мог бы создать сервис и внедрить его без использования этого абстрактного сервиса.
Есть ли способ вызвать ошибки времени компиляции с использованием внедрения угловой зависимости? Я хотел бы предотвратить ошибки времени выполнения, которые происходят в приведенном выше примере.
Потенциальный обходной путь, который решает мою проблему: https://github.com/tygern/safe-provide