programing

Angular 2 불투명 토큰 대 Angular 4 주입상품권

bestprogram 2023. 6. 26. 21:31

Angular 2 불투명 토큰 대 Angular 4 주입상품권

InjectionTokenAngular 4에 소개되었고,OpaqueToken사용되지 않는 것으로 표시되었습니다.

설명서에 따르면, 그것은 다음과 같이 사용되어야 합니다.

const anyToken = new InjectionToken('any');

입력되지 않은 토큰의 경우 및

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

입력된 토큰의 경우.

하지만, 타이핑된 토큰은 여전히 주입될 때 다른 유형으로 주입되고 사용될 수 있는데, TypeScript는 이것으로 괜찮을 것입니다, 그렇지 않나요?

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

어떻게 있다.InjectionTokenTypeScript 유형 시스템의 혜택을 받아야 합니까?

왜 그랬을까요?OpaqueToken그 둘 사이에 실질적인 차이가 없다면 더 이상 추천되지 않는 것입니까?

의 내부 사용을 기준으로 함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'.
    }
}

언급URL : https://stackoverflow.com/questions/43419050/angular-2-opaquetoken-vs-angular-4-injectiontoken