输入' {}'不能分配类型'字符串'

时间:2016-06-04 18:30:56

标签: typescript angular router rxjs5 ngrx

我正在使用 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'.
      });
  }
}

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

  

输入' {}'不能指定为' string'。

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

但为什么这个警告会显示出来?有人可以为我解释一下吗?感谢

1 个答案:

答案 0 :(得分:5)

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

  

这不起作用的两个原因:

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

  2.   由于字符串选择器,
  3. pluck('id')无法正常输入   不知道

  4.         

    解决方法是显式输入pluck():

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

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

this._routeParams$
  .pluck<string>('token')
  .subscribe(token => this.token = token);