Vue + Typescript vue-router 和参数类型

Posted

技术标签:

【中文标题】Vue + Typescript vue-router 和参数类型【英文标题】:Vue + Typescript vue-router and type of params 【发布时间】:2020-05-07 19:31:15 【问题描述】:

我正在尝试将一些数据从一个组件发送到另一个组件,但我遇到了一些类型问题。 这是我的代码:

const someData: object = 
   param1: 'param1',
   param2: 'param2',
   array: [,]

this.$router.push( name: 'SomePage', params:  someData  ) 

我是这样获取数据的:

  get param1 (): string 
    return this.$route.params.someData['param1']
  
  get param2 (): string 
    return this.$route.params.someData['param2']
  
  get array (): Array<object> 
    return this.$route.params.someData['array']
  

还有来自控制台的错误:

Argument of type ' name: string; params:  someData: object; ; ' is not assignable to parameter of type 'RawLocation'.
  Type ' name: string; params:  someData: object; ; ' is not assignable to type 'Location'.
    Types of property 'params' are incompatible.
      Type ' someData: object; ' is not assignable to type 'Dictionary<string>'.
        Property 'someData' is incompatible with index signature.
          Type 'object' is not assignable to type 'string'.

仅当我将类型 any 输入到 someData 时它才有效,但我不会不使用它。 我怎么解决这个问题?这是什么'Location''RawLocation' 类型?

【问题讨论】:

我遇到了同样的问题。 Here 是与此相关的 GitHub 问题。有一个回复说“目前,使用 always 字符串是正确的方法,打字很好”。 关于你,@MagnusTeekivi,请检查答案 【参考方案1】:

您可以通过页面作为查询参数传递的是字符串类型,而不是其他任何东西。这意味着您不能通过查询参数发送数组。 您应该将所有参数更改为字符串

   const someData: object = 
      param1: 'stringType',
      param2: 'stringType',
      ...
   
   this.$router.push( name: 'SomePage', params:  someData  )

而不是vux 的查询参数,您可以保存和数据类型并在您想要的任何地方使用它,在我的开头,我会更好,因为同时您可以自己管理传递的数据

关于你@MagnusTeekivi 您可以将其转换为字符串,然后才能使用它,就像这样

`this.$router.push( name: 'user', params:  userId.toString() )`

【讨论】:

以上是关于Vue + Typescript vue-router 和参数类型的主要内容,如果未能解决你的问题,请参考以下文章

typescript vue-router代码分裂

使用 TypeScript 和 FirebaseAuthUI 在 Store 中使用 vue-router 进行 Vue 导航

带有Typescript和beforeEnter保护的Vue-router,如何使用经过验证的数据?

Vue + Typescript vue-router 和参数类型

Vue 2.5将迎来有关TypeScript的优化!

Building Vue3 + Typescript + without cli 最佳实践