Angular 7.2.0: тип «строка» не может быть назначен типу «RunGuardsAndResolvers»

Угловой компилятор-cli v.7.2.0 выдает:

Types of property 'runGuardsAndResolvers' are incompatible. Type 'string' is not assignable to type 'RunGuardsAndResolvers'

при установке runGuardsAndResolvers: 'always' в константе, которая импортируется в AppRoutingModule.

Этого не происходит, когда я устанавливаю runGuardsAndResolvers: 'always' внутри самого AppRoutingModule.

приложение-routing.module.ts

import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { adminRouterConfig } from 'src/app/core/_routing/admin-router-config';

const appRoutes: Routes = [
  { path: '', component: HomeComponent },
  {
    path: '',
    children: [
      ...adminRouterConfig
    ]
  },
  { path: '**', redirectTo: '', pathMatch: 'full' }
  ];

@NgModule({
  imports: [RouterModule.forRoot(appRoutes,
                                 { enableTracing: true }
)],
  exports: [RouterModule]
})

export class AppRoutingModule { }

admin-маршрутизатор-config.ts

import { AuthGuard } from 'src/app/core/_guards/auth.guard';

export const adminRouterConfig = [
  {
    path: 'admin',
    runGuardsAndResolvers: 'always',
    canActivate: [AuthGuard],
    children: [
      ...
    ]
  }
];
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
0
1 230
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Именно так работает вывод типов в TypeScript. Когда вы впервые присваиваете его переменной, он выводит тип переменной как {runGuardsAndResolvers: string}, а затем он не совпадает, когда он используется позже. В этом случае вы должны указать тип явно:

const options = {
  runGuardsAndResolvers: "always" as RunGuardsAndResolvers
};

Взгляните на этот пример:

const method = (options: { runGuardsAndResolvers: RunGuardsAndResolvers }) => {
  return options;
};

// This works
method({ runGuardsAndResolvers: "always" });

// This fails
const options = { runGuardsAndResolvers: "always" };
method(options);

// This works
const typedOptions = {
  runGuardsAndResolvers: "always" as RunGuardsAndResolvers
};
method(typedOptions);

Живая демонстрация:

Edit Typescript type inference

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