ts类型报错?

在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;
        },

阅读 502
2 个回答

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;
},

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

推荐问题
logo
Microsoft
子站问答
访问
宣传栏