2

我想使用依赖注入来交换提供者的实现,但不知道如何使该类型安全。

@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

4

0 回答 0