Angular 2 OpaqueToken vs Angular 4 InjectionToken

前端之家收集整理的这篇文章主要介绍了Angular 2 OpaqueToken vs Angular 4 InjectionToken前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在Angular 4中引入了InjectionToken,并且OpaqueToken被标记为已弃用。

According to the manual,它应该被用作

const anyToken = new InjectionToken('any');

对于无类型的令牌,以及

const numberToken = new InjectionToken<number>('number');

对于键入的令牌。

但是,键入的令牌仍然可以在注入时注入并使用不同的类型,TypeScript就可以了,不是吗?

constructor(@Inject(numberToken) any,@Inject(numberToken) string: string) { ... }

InjectionToken如何从TypeScript类型系统中受益?

如果这两者之间没有实际区别,为什么OpaqueToken会被弃用?

根据InjectionToken的内部用法,例如 here,我假设在通过注入器实例获取依赖关系时,InjectionToken为您提供类型检查优势:
import {Component,InjectionToken,Injector} from "@angular/core";
interface AppConfig {
    name: string;
}

let APP_CONFIG = new InjectionToken<AppConfig>('app.config');
let appConfig: AppConfig = {name: 'Cfg'};

@Component({
    ...
    providers: [{provide: APP_CONFIG,useValue: appConfig}]
})
export class TestComponent {
    constructor(injector: Injector) {
        const config = injector.get(APP_CONFIG);
        config.s = 'd';
            ^^^^^ - Error:(14,16) TS2339:Property 's' does not exist on type 'AppConfig'.
    }
}

猜你在找的Angularjs相关文章