向大家请教 TypeScript 的问题

2021-12-07 15:23:38 +08:00
 iwasthere

问题如下:


export const getMaterialListGrades = (params:{numStr:string,version:string})=>{

    return request('/api', {
        method: 'GET',
        params:params
    });

}

ts 目前已经推断出返回值是一个 Promise any 的类型,请问如何才能详细的定义返回的结构?

已谷歌搜索相关答案,但没找到,可能是关键字不对,谢谢大家!

779 次点击
所在节点    问与答
10 条回复
yuhangch
2021-12-07 15:27:12 +08:00
thefack
2021-12-07 15:30:29 +08:00
改成这样的,在方括号中间定义返回值的类型:
export const getMaterialListGrades =function (params:{numStr:string,version:string})[:Promise<any>]{

return request('/api', {
method: 'GET',
params:params
});

}
LancerComet
2021-12-07 15:36:28 +08:00
const getMaterialListGrades = (params: {...}): Promise<Something> => request({ ... })

让 request 支持泛型最好

const getMaterialListGrades = () => request<Something>({ ... })
wunonglin
2021-12-07 15:41:13 +08:00
返回 Promise<any>没错呀。因为你没确定这个 any 里面的东西。

这样就能知道返回的是什么

https://s2.loli.net/2021/12/07/3myPk7VWJMpnlU9.png
iwasthere
2021-12-07 15:41:41 +08:00
@yuhangch 谢谢解答,这种方法的话需要改造 request ,场景不是很合适,后面的回答解决了
iwasthere
2021-12-07 15:42:54 +08:00
@wunonglin 对,我就是项定义这个 any
wunonglin
2021-12-07 15:43:34 +08:00
不知道你这个 request 是哪来的,如果是 axios 的话,他是支持泛型的,你自己二次包装也需要按我发的图那样把泛型给定义好。实在不行就直接断言,只不过这样体验很烂而已
iwasthere
2021-12-07 15:45:49 +08:00
@wunonglin 嗯,是个好提议,谢谢
wunonglin
2021-12-07 15:48:28 +08:00
可以这么干,不管 request 返回的是什么妖魔鬼怪,统一在 func 返回 Promise<Material>即可,func 里面的就直接断言 Promise<any>或者直接 any ,这不影响 func 返回的类型

https://s2.loli.net/2021/12/07/Ulw4RxIKTGrJ5tM.png
iwasthere
2021-12-07 15:55:40 +08:00
@wunonglin 哈哈,可以,看了你的代码又学了一招,谢谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/820632

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX