17681880207
V2EX  ›  问与答

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

  •  
  •   17681880207 · Feb 23, 2023 · 1418 views
    This topic created in 1209 days ago, the information mentioned may be changed or developed.

    例如我定义了一个对象

    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 replies    2023-03-07 08:29:16 +08:00
    nowtg
        1
    nowtg  
       Feb 23, 2023 via iPhone
    IUser[‘hobby’]
    drydiy
        2
    drydiy  
       Feb 24, 2023 via iPhone
    建议官网系统的学习一遍吧。这么简单的问题你都要问,一是这种问答效率太低,二是说明你基础不好。
    reoah2
        3
    reoah2  
       Feb 24, 2023
    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
       Mar 7, 2023
    @drydiy
    问个简单的问题就能下这么多定义哇?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1167 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 45ms · UTC 17:48 · PVG 01:48 · LAX 10:48 · JFK 13:48
    ♥ Do have faith in what you're doing.