V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
iwasthere
V2EX  ›  问与答

向大家请教 TypeScript 的问题

  •  
  •   iwasthere · 2021-12-07 15:23:38 +08:00 · 862 次点击
    这是一个创建于 1101 天前的主题,其中的信息可能已经有所发展或是发生改变。

    问题如下:

    
    export const getMaterialListGrades = (params:{numStr:string,version:string})=>{
    
        return request('/api', {
            method: 'GET',
            params:params
        });
    
    }
    
    
    ts 目前已经推断出返回值是一个 Promise any 的类型,请问如何才能详细的定义返回的结构?

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

    10 条回复    2021-12-07 15:55:40 +08:00
    yuhangch
        1
    yuhangch  
       2021-12-07 15:27:12 +08:00
    thefack
        2
    thefack  
       2021-12-07 15:30:29 +08:00   ❤️ 1
    改成这样的,在方括号中间定义返回值的类型:
    export const getMaterialListGrades =function (params:{numStr:string,version:string})[:Promise<any>]{

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

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

    让 request 支持泛型最好

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

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

    https://s2.loli.net/2021/12/07/3myPk7VWJMpnlU9.png
    iwasthere
        5
    iwasthere  
    OP
       2021-12-07 15:41:41 +08:00
    @yuhangch 谢谢解答,这种方法的话需要改造 request ,场景不是很合适,后面的回答解决了
    iwasthere
        6
    iwasthere  
    OP
       2021-12-07 15:42:54 +08:00
    @wunonglin 对,我就是项定义这个 any
    wunonglin
        7
    wunonglin  
       2021-12-07 15:43:34 +08:00
    不知道你这个 request 是哪来的,如果是 axios 的话,他是支持泛型的,你自己二次包装也需要按我发的图那样把泛型给定义好。实在不行就直接断言,只不过这样体验很烂而已
    iwasthere
        8
    iwasthere  
    OP
       2021-12-07 15:45:49 +08:00
    @wunonglin 嗯,是个好提议,谢谢
    wunonglin
        9
    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
        10
    iwasthere  
    OP
       2021-12-07 15:55:40 +08:00
    @wunonglin 哈哈,可以,看了你的代码又学了一招,谢谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5037 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 07:58 · PVG 15:58 · LAX 23:58 · JFK 02:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.