TypeScript函数重载中无法访问形参

发布于 2022-09-12 13:50:07 字数 335 浏览 32 评论 0

假设我们有下面这样一个重载函数,可以不传参数,也可以传入两个或者四个,现在这样的写法在ts中会报错

function show(): void;
function show(x: number, y: number): void;
function show(x: number, y: number, w: number, h: number): void;
function show(...args: any[]): void {
  console.log(x); // Cannot find name 'x'
}
show();

这样的写法有问题么

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

初见你 2022-09-19 13:50:07

image.png

给你一个修改建议:

function show(): void;
function show(x: number, y: number): void;
function show(x: number, y: number, w: number, h: number): void;
function show(x?: number, y?: number, w?: number, h?: number): void {
    if (x !== undefined && y !== undefined) {
        console.log(`${x} and ${y} are valid number now`);
        console.log("calc result:", x + y);
    }

    if (w !== undefined && h !== undefined) {
        console.log(`${w} and ${h} are valid number now`);
        console.log("area size: ", w * h);
    }
}

说明:

  1. 实现时的参数列表,必须兼容所有声明。比如上面实现时所有参数可选,是为了兼容 show() 这个声明
  2. 实现时对 x, y, w, h 分别进行了非 undefined 判断,可以保证分支中它们不是 undefined,所以可以直接使用(如果不加判断是不能直接参与运算的)

欢迎来学习我的课程:TypeScript从入门到实践 【2020 版】

3.2 节的 2分20秒 左右讲到了相关的问题

image.png

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文