首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Angular 2 OpaqueToken vs Angular 4 InjectionToken

Angular 2 OpaqueToken vs Angular 4 InjectionToken
EN

Stack Overflow用户
提问于 2017-04-15 04:49:26
回答 1查看 18.2K关注 0票数 26

InjectionToken是在Angular 4中引入的,而OpaqueToken被标记为不推荐使用。

According to the manual,它应该被用作

代码语言:javascript
运行
复制
const anyToken = new InjectionToken('any');

用于非类型化的令牌,以及as

代码语言:javascript
运行
复制
const numberToken = new InjectionToken<number>('number');

用于键入的令牌。

但是,类型化的token在注入时仍然可以注入和使用不同的类型,TypeScript可以接受这一点,不是吗?

代码语言:javascript
运行
复制
constructor(@Inject(numberToken) any, @Inject(numberToken) string: string) { ... }

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-16 13:48:26

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

代码语言:javascript
运行
复制
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'.
    }
}
票数 27
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43419050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档