gpt4 book ai didi

Angular 2 OpaqueToken 与 Angular 4 InjectionToken

转载 作者:太空狗 更新时间:2023-10-29 16:50:42 24 4
gpt4 key购买 nike

InjectionToken 在 Angular 4 中引入,OpaqueToken 被标记为已弃用。

According to the manual , 它应该用作

const anyToken = new InjectionToken('any');

对于未类型化的 token ,以及

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

用于输入的 token 。

但是,typed token 仍然可以注入(inject)并在注入(inject)时用于不同的类型,TypeScript 可以接受这个,不是吗?

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

InjectionToken 应该如何从 TypeScript 类型系统中获益?

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

最佳答案

基于InjectionToken的内部使用,例如here ,我假设 InjectionToken 在通过 injector 实例获取依赖项时为您提供类型检查好处:

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'.
}
}

关于Angular 2 OpaqueToken 与 Angular 4 InjectionToken,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43419050/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com