当前位置: 首页 > 知识库问答 >
问题:

vue.js - ts类型报错?

江向阳
2024-04-02

在vue3和pinia使用ts
type+sId+zId 三个都会报 “property type does not exist on object”

//定义    state: (): IUserState => ({        sId: '', //展会ID        zId: '', //剧本ID        type: '1', //1讲座 0展会    }),//方法actions:{  setSId(data: object) {      this.type = data.type      this.sId = data.sId      this.zId = data.zId   },}//使用  profileStore.setSId({    type: '1',    sId: '',    zId: id  })

新补充

v1,v2...是接口返回来的,自己重新定义了新key,v1写在IUserState了没有报错,其他都飘红

interface IUserState {    v1:string,}   setInfo(data: IUserState) {            this.extensionId = data.v1;            this.enterTags = data.v2;            this.employeeLogin = data.v3;            this.cityList = data.v4;            this.aId = data.v5;            this.aName = data.v6;            this.roleId = data.v7;            this.roleName = data.v8;            this.userType = data.v9;        },

共有2个答案

景岳
2024-04-02

object 是一个比较窄的类型,把object 修改为 Record<string,any> 或 IUserState 试试

拓拔富
2024-04-02

object 类型只能表示对象类型(非原始类型),但是并不能访问具体属性。即 TS 只知道其是个对象,但不知拥有哪些属性。
所以对于知道具体属性的对象类型,需要使用 interface 或者 type 进行精确定义。

interface IUserState {    sId: string;    zId: string;    type: string;}//方法actions:{  setSId(data: IUserState) {      this.type = data.type      this.sId = data.sId      this.zId = data.zId   },}

补充回答:
对于结构是对象(键值对),但是字段具体类型未知的类型可以使用 Record 类型。

setInfo(data: Record<string, any>) {    this.extensionId = data.v1;    this.enterTags = data.v2;    this.employeeLogin = data.v3;    this.cityList = data.v4;    this.aId = data.v5;    this.aName = data.v6;    this.roleId = data.v7;    this.roleName = data.v8;    this.userType = data.v9;},
 类似资料: