TypeScript中如何在user函数上正确实现IUser接口
核心问题
现有代码无法正确实现接口的原因有两点:
user函数声明返回值类型为IUser,但函数体内没有返回符合接口结构的对象,直接在函数作用域内书写键值对属于无效JavaScript/TypeScript语法。- 草稿代码中
groups方法的返回类型标注错误,接口要求返回Promise<object[]>,草稿中标注为Promise<object>,存在类型不匹配问题。
正确实现代码
首先定义代码中用到的Options类型(可根据实际业务需求扩展字段),再补全user函数的返回逻辑:
// 可根据实际业务调整Options的字段定义 interface Options { userId?: string; requestTimeout?: number; } interface IUser { infomation(): Promise<object>; groups(): Promise<object[]>; } function user(options?: Options): IUser { // 返回符合IUser接口结构的对象 return { async infomation(): Promise<object> { // 替换为实际业务逻辑,示例为接口请求逻辑 const response = await fetch("/api/user/info", { method: "GET", body: options ? JSON.stringify(options) : undefined }); return response.json(); }, async groups(): Promise<object[]> { // 替换为实际业务逻辑 const response = await fetch("/api/user/groups"); return response.json(); } } }
如果不需要使用async/await语法,也可以直接返回Promise实例,写法如下:
function user(options?: Options): IUser { return { infomation(): Promise<object> { // 示例逻辑 return Promise.resolve({ username: "demo", userId: options?.userId }); }, groups(): Promise<object[]> { return Promise.resolve([{ groupId: 1, groupName: "default" }]); } } }
类型提示效果
实现完成后,当输入user(/* 传入对应options参数 */).时,TypeScript会自动推导返回值为IUser类型,编辑器会自动提示接口下定义的infomation、groups成员方法,满足自动补全需求。
提示:如果接口中的
infomation为拼写失误(正确拼写为information),建议同步修改接口定义和实现中的方法名,避免后续调用时出现拼写错误。
内容的提问来源于stack exchange,提问作者Vijay
相关产品推荐
相关产品推荐

