Est*_*ask 26 typescript angular
InjectionToken在Angular 4中引入OpaqueToken并被标记为已弃用.
根据手册,它应该被用作
const anyToken = new InjectionToken('any');
Run Code Online (Sandbox Code Playgroud)
对于无类型的令牌,以及
const numberToken = new InjectionToken<number>('number');
Run Code Online (Sandbox Code Playgroud)
对于键入的令牌.
但是,键入的令牌仍然可以在注入时注入并使用不同的类型,TypeScript就可以了,不是吗?
constructor(@Inject(numberToken) any, @Inject(numberToken) string: string) { ... }
Run Code Online (Sandbox Code Playgroud)
如何InjectionToken从TypeScript类型系统中受益?
OpaqueToken如果这两者之间没有实际差异,为什么被弃用?
Max*_*kyi 27
根据InjectionToken例如此处的内部用法,我假设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'.
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16932 次 |
| 最近记录: |