【问题标题】:Angular 7.2.0: Type 'string' is not assignable to type 'RunGuardsAndResolvers'Angular 7.2.0:类型“字符串”不可分配给类型“RunGuardsAndResolvers”
【发布时间】:2019-08-18 07:51:39
【问题描述】:

Angular compiler-cli v.7.2.0 正在抛出:

属性“runGuardsAndResolvers”的类型不兼容。类型 'string' 不可分配给类型 'RunGuardsAndResolvers'

在导入AppRoutingModule的常量中设置runGuardsAndResolvers: 'always'时。

当我在 AppRoutingModule 本身中设置 runGuardsAndResolvers: 'always' 时,不会发生这种情况。

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: [
      ...
    ]
  }
];

【问题讨论】:

    标签: javascript angular typescript angular-router


    【解决方案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);
    

    现场演示:

    【讨论】:

      猜你喜欢
      • 2020-05-30
      • 2017-12-28
      • 1970-01-01
      • 2021-02-22
      • 2020-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多