TS问题记录

一、需求?

将js文件改为ts文件时,记录使用ts时使用的问题

一、问题记录

1.子项参数至少满足id项,其余参数任意

is_repeat方法为判断函数中id是否重复,参数类型为数组对象,子项中必须包含id项(因为用id作唯一判断),js代码如下(示例):

// 判断对象数组中id是否重复
const is_repeat = (arr) => {
  // 返回一个id的数组
  const newArr = arr.map((item) => item.id.toString());
  // Set类似于数组,区别在于它所有的成员都是唯一的,不能有重复的值,会将重复的值去重
  const arrSet = new Set(newArr);
  // 判断set之后的数组的长度跟set之前的数组是否相等
  // false表示有重复id
  return arrSet.size === newArr.length;
};

ts改写:此时arr至少每项包含了id,其余参数为任意个

// 判断对象数组中id是否重复
const is_repeat = (
  arr: {
    id: string | number;
    [key: string]: any;
  }[]
): boolean => {
  // 返回一个id的数组
  const newArr = arr.map((item) => item?.id?.toString());
  // Set类似于数组,区别在于它所有的成员都是唯一的,不能有重复的值,会将重复的值去重
  const arrSet = new Set(newArr);
  // 判断set之后的数组的长度跟set之前的数组是否相等
  // false表示有重复id
  return arrSet.size === newArr.length;
};

2.类型“AxiosResponse<any, any>”上不存在属性“xxx”

在使用axios使用接口时,我现在响应拦截器中,返回一层data:

http.interceptors.response.use(
  (response) => {
    // 返回第一层data数据,在接口调用时,就不需要res.data.data
    return response.data;
  }
)

使用时,需要根据接口的res.code进行判断时报错:

类型“AxiosResponse<any, any>”上不存在属性“code”

解决:添加声明文件:

interface ResType {
  // 可加其他任意参数,此时这里算第二层data,但是挂载位置是在第一层
  code: number;
  success: boolean;
  message: any;
  data: any;
}

export declare module "axios" {
  interface AxiosResponse extends ResType {}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值