Angular 7.2.0: тип 'string' не может быть назначен типу 'RunGuardsAndResolvers' - PullRequest
1 голос
/ 27 марта 2019

Выдает Angular compiler-cli v.7.2.0:

Типы свойств 'runGuardsAndResolvers' несовместимы.Тип 'string' нельзя назначить типу 'RunGuardsAndResolvers'

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

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

app-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-router-config.ts

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

export const adminRouterConfig = [
  {
    path: 'admin',
    runGuardsAndResolvers: 'always',
    canActivate: [AuthGuard],
    children: [
      ...
    ]
  }
];

1 Ответ

1 голос
/ 27 марта 2019

Именно так работает вывод типов в 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

...