Тип токена Angular DI Injection не соответствует типу возвращаемого значения фабрики, но служба принимает

Почему можно предоставить токен инъекции определенного типа, но можно передать фактическое значение другого типа, и это будет принято в службе, внедренной с токеном?

      import { InjectionToken } from '@angular/core';

export const CONFIG = new InjectionToken<string>("SomeToken");
      export interface Config {
    environment: 'someEnv' | 'someEnvTwo';
}
      export function configurationFactory(): any {
    const configuration = {
        environment: 'someEnv';
    }
    return configuration;
}

@NgModule({
    imports: [...],
    exports: [...],
    providers: [
        {
            provide: CONFIG,
            useFactory: configurationFactory
        }
    ]
})
export class SomeModule { }
      @Injectable({
  providedIn: 'root',
})
export class ConfigurationService {
    constructor(@Inject(CONFIG) private config: Config) {
        const environment = config.environment;
    }
}

В этом случае ConfigurationService внедряется с токеном, который имеет тип, но определяет тип как . В модуле указывается предоставление CONFIGtoken и используя значение типа as, но соответствующее интерфейсу.

Не возникнет ли у ConfigurationService конфликта с токеном, указанным как type , не соответствующим Configвведите параметр конструкции?

Не будет ли модуль предоставлен CONFIG_TOKENконфликт с фабрикой, возвращающей anyобъект, а не string?

Ссылка на документацию Angular DI подсказывает мне, что это невозможно, однако это работает.

0 ответов

Другие вопросы по тегам