一、需求?
将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 {}
}