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

请问 ts 函数返回一个接口的属性的类型,该如何写?

  •  
  •   17681880207 · 2023-02-23 23:30:59 +08:00 · 722 次点击
    这是一个创建于 398 天前的主题,其中的信息可能已经有所发展或是发生改变。

    例如我定义了一个对象

    interface IUser {
    	name: string
    	age: number
    	hobby: {
    		name: string
    		durationTime: string
    		reason: string
    	}
    }
    

    定义个一个函数,返回的类型是 hobby 类型,如果不把 hobby 提取出去单独声明,有没有方法可以实现代码

    const getHobby = (params: {userId: number}): Promise<IUser.hobby> {
    	const user = await api.getUserById(...)
    	return user.hobby
    }
    

    以上部分的 Promise<IUser.hobby> 应该替换成什么?

    4 条回复    2023-03-07 08:29:16 +08:00
    liuw666
        1
    liuw666  
       2023-02-23 23:33:45 +08:00 via iPhone
    IUser[‘hobby’]
    drydiy
        2
    drydiy  
       2023-02-24 08:18:30 +08:00 via iPhone
    建议官网系统的学习一遍吧。这么简单的问题你都要问,一是这种问答效率太低,二是说明你基础不好。
    reoah2
        3
    reoah2  
       2023-02-24 09:06:34 +08:00
    generate by chatgpt:
    您可以使用下面的语法来定义函数返回接口中的属性类型:

    typescript
    Copy code
    const getHobby = (params: {userId: number}): Promise<IUser['hobby']> => {
    const user = await api.getUserById(...)
    return user.hobby
    }
    在这里,我们使用了 TypeScript 中的索引类型查询操作符 ['hobby'] 来获取 IUser 接口中 hobby 属性的类型。

    将 Promise<IUser.hobby> 替换为 Promise<IUser['hobby']> 即可。

    请注意,在实际代码中,如果需要多次使用 IUser['hobby'] 类型,建议将其提取为一个类型别名,如下所示:

    typescript
    Copy code
    type UserHobby = IUser['hobby'];

    const getHobby = (params: {userId: number}): Promise<UserHobby> => {
    const user = await api.getUserById(...)
    return user.hobby
    }
    这样可以提高代码的可读性和可维护性。
    17681880207
        4
    17681880207  
    OP
       2023-03-07 08:29:16 +08:00
    @drydiy
    问个简单的问题就能下这么多定义哇?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3012 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 15:04 · PVG 23:04 · LAX 08:04 · JFK 11:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.