Angular 7.2.0:类型 'string' 不可分配给类型 'RunGuardsAndResolvers'
Angular 7.2.0: Type 'string' is not assignable to type 'RunGuardsAndResolvers'
Angular compiler-cli v.7.2.0 正在抛出:
Types of property 'runGuardsAndResolvers' are incompatible. Type
'string' is not assignable to type '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: [
...
]
}
];
这就是类型推断在 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);
现场演示:
Angular compiler-cli v.7.2.0 正在抛出:
Types of property 'runGuardsAndResolvers' are incompatible. Type 'string' is not assignable to type '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: [
...
]
}
];
这就是类型推断在 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);
现场演示: