TypeScript无法识别接口中的函数表达式联合类型问题
TypeScript 联合函数类型调用与类型提示问题
接口与实现代码
我定义了如下接口:
export default interface IUserManager { deleteUser: ((userId: string) => Promise<void>) | ((userName: string, userSurname: string, city: string) => Promise<void>); }
在CompanyProcessor类中使用该接口的实例:
import MyUserManager from "path/to/IUserManager.ts" class CompanyProcessor { private myUserManager: IUserManager; public constructor() { this.myUserManager = new MyUserManager(); // MyUserManager 实现了 IUserManager } public async deleteUser(userId: string): Promise<void> { await this.myUserManager.deleteUser(userid); // 报错:Expected 3 argument, but got 1. ts(2554) } }
问题详情
- 调用报错:调用单参数版本的
deleteUser时,TypeScript提示需要传入3个参数,触发ts(2554)错误。 - VSCode悬停提示异常:
- 直接悬停接口中的
deleteUser属性,能正常显示完整的联合函数类型; - 悬停
CompanyProcessor中的调用代码时,仅显示参数数量最多的那个函数签名,原场景提示如下:(property) IUserManager.deleteUser: (userName: string, userSurname: string, city: string) => Promise<void>
- 直接悬停接口中的
- 修改可选参数后的副作用:尝试把
userSurname和city设为可选参数后,调用不再报错,但破坏了“必须传入3个参数”的原有约束,且此时悬停提示显示重载,但实际没有用到联合类型中的单参数函数,修改后的提示如下:(property) IUserManager.deleteUser: (userName: string, userSurname?: string, city?: string) => Promise<void> (+1 overload)
我的TypeScript版本是4.7.4。
内容的提问来源于stack exchange,提问作者user19766493
相关产品推荐
相关产品推荐

