2

我正在使用ngrx/router

当我打开http://localhost/set-new-password/abc时,RouteParams效果很好。token我可以得到我想要的字符串。

const landingRouter: Routes = [
  { path: '/set-new-password/:token', component: SetNewPasswordComponent },
];

export class SetNewPasswordComponent implements OnInit {
  token: string = '';

  constructor(private _routeParams$: RouteParams) {}

  ngOnInit()
  {
    this._routeParams$
      .pluck('token')
      .subscribe(token => {
        console.log(typeof token); // Console: "string"
        console.log(token);        // Console: "abc"
        this.token = token;        // Terminal: Type '{}' is not assignable to type 'string'.
      });
  }
}

但是,我在终端中收到了这个警告:

类型“{}”不可分配给类型“字符串”。

我知道我可以用this.token = String(token);它来摆脱它。

但是为什么会出现这个警告呢?有人可以为我解释一下吗?谢谢

4

1 回答 1

5

从@brandonroberts 获得对@MikeRyan52 原始答案的帮助,谢谢!

这不起作用的两个原因:

  1. 我们实际上直到运行时才知道 params 对象的形状,所以没有一个好的类型来描述它

  2. pluck('id') 无论如何都不能很好地输入,因为字符串选择器是未知的

解决方案是显式键入 pluck():

params$.pluck<string>('id')

所以我的情况正在改变为:

this._routeParams$
  .pluck<string>('token')
  .subscribe(token => this.token = token);
于 2016-06-04T18:48:32.073 回答