const <T>() => {
const t: T = await api() // 接口获取的
// 标红
// Property 'list' does not exist on type 'NonNullable'.
console.log(t.list)
}
这个咋解决哇?
const <T>() => {
const t: T = await api() // 接口获取的
// 标红
// Property 'list' does not exist on type 'NonNullable'.
console.log(t.list)
}
这个咋解决哇?
const <T>() => {
const t: T = await api() as T // 这里加个as你定义的类型,为外来数据指定类型
// 标红
// Property 'list' does not exist on type 'NonNullable'.
console.log(t.list)
}
如果是希望整个函数以类型 T
来标志返回类型的话,那么 api()
这个函数本身也应当是一个泛型函数,即api<T>()
。而这个传给 api<T>()
的类型T
会被用于标注 api
这个函数的返回值类型。
如果楼主只是为了解决标红,@Sora的方法就差不多了,其实用any可以更简单粗暴的搞定飘红问题,可是这是否是你想要的?至少我是不允许我的组员这么干的。ts除了可以有效的进行语法检查外对于代码可读性也有极大帮助,甚至后者是更重要的。相似功能的示例代码如下,供参考
// 全局类型声明文件中
export interface StandardResponse<T> {
status: number;
message?: string;
data: T
}
// 结构体声明文件中
export interface DemoData {
id?: string;
name: string;
}
// API请求封装文件中
export async function getDemoData(id: string): Promise<StandardResponse<DemoData>> {
return request(`${url}/${id}`);
}
// 组件内
const getDemo = async (): Promise<DemoData> => {
const resolve = await getDemoData('1');
return resolve.data;
}
10 回答11.7k 阅读
2 回答3.2k 阅读✓ 已解决
2 回答4.2k 阅读✓ 已解决
3 回答2.7k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
2 回答1.7k 阅读✓ 已解决
4 回答2.5k 阅读✓ 已解决
api
函数设计有问题, 实际上应该是api<T>()
, 泛型T没有list属性, 所以需要设置一个泛型上限。