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

2023-02-23 23:30:59 +08:00
 17681880207

例如我定义了一个对象

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> 应该替换成什么?

761 次点击
所在节点    问与答
4 条回复
liuw666
2023-02-23 23:33:45 +08:00
IUser[‘hobby’]
drydiy
2023-02-24 08:18:30 +08:00
建议官网系统的学习一遍吧。这么简单的问题你都要问,一是这种问答效率太低,二是说明你基础不好。
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
2023-03-07 08:29:16 +08:00
@drydiy
问个简单的问题就能下这么多定义哇?

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

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

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

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

© 2021 V2EX