typescript重载提示问题

function call(name: "showToast", data: { content: string }): void;
function call(name: "showConfirm", data: { age: number }): void;
function call(name: any, data: any): void {}

call("showToast", {
  content: 123
})

image.png

image.png

能够根据定位参数name的值,给出data参数不匹配的提示吗?

想要做到直接提示showToastcontent类型错误

阅读 2.5k
3 个回答

No overload matches this call已经说明了重载的检测方式是模式对比,而不是确定一个模式然后内部检查。假设签名为A+B,在你看来写了A+C应该报C错误,但这里也有可能存在一个D+C的重载;又或者值是对的,而现有重载并未包含所有格式。TS很难猜到你的意图

type Obj = {
    'showToast': { content: string},
    ...
}

function call(name: K extends keyof Obj, data: Obj[K]): void;

试试

提示你一下,JS不支持重载,支持重载的是TS中的类型。你要先声明一个类型,再将这个类型施加到真正的实现上。vscode不知道有没有提示,安装了TS会自带一部分系统性的声明文件,参考一下里面的涉及重载部分的写法

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题