问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何看待Typescript中的重载

发布网友 发布时间:2022-04-26 05:54

我来回答

1个回答

热心网友 时间:2022-04-22 15:08

第一,常见的静态类型语言中的overload是发生在编译时的,编译器可以清楚的将每一处同名函数调用对应到你写的不同的函数实现。也就是,同名只是一个(让程序员看到的)假象。如你写了fun(x),有两个实现fun(x: string)、fun(x: int),真正编译后的程序里实际会有两个函数,假设记做fun_string和fun_int,而每个fun(x)调用会被自动替换成fun_string(x)或fun_int(x)。有没有可能编译器无法确定替换成哪一个?当然有可能,这个时候编译器就报错了嘛,意思是你代码写错啦!第二,JavaScript是动态类型,所以是没有上面这种意义上的overload的。但JS程序员可以在运行时判断类型,也就是 function fun(x) { if (typeof x === 'string') ... else/* assume x is int */ ... } 。TypeScript 的『overload』只是允许给这样的函数标注多个类型。某轮说这是『绕过编译器类型检查』,是有问题的。这不是绕过,把函数参数标记为 (x: any) 才叫『绕过』。不过因为函数的具体实现只有一个,代码本身会比上面那种overload要麻烦一些,比如说为了检测类型偶尔你需要自己实现一些 type guard。至于说『下标函数也不能自己写,这个很傻*』,我估计某轮指的是 operator overload,然而很多语言都不允许(比如 java)。所以单单骂 TS/JS 有点扯。第三,TS理论上当然是可以实现传统的 overload 的,比如直接生成两个函数,fun1、fun2。问题是从TS与JS的互操作性上来说,这事情就比较麻烦,比如一个js项目用了ts的库,我不能直接写fun,而得写fun1、fun2。本来 overload 就是希望给程序员提供便利,但现在就并没有什么卵用。其实像java之类有『真』重载的语言编译到js,或直接和js互操作,都有类似的问题。早在二十年前rhino里就有这问题——你在js里要指定到底调用的是哪一个java的重载方法是非常烦人的。特别是构造器,一般函数你说编译成fun_string、fun_int也就算了,但构造器呢?相当棘手。那TS能不能自动生成一个把多个实现合并起来的fun呢?不好办。因为runtime的类型检查和编译时类型检查是很不一样的(可以上网去查下override和overload的差异,前者通常就是runtime的),而且TS编译后并没有保留类型信息,所以复杂一点的类型根本没法在runtime检查。并且不带有runtime类型检查是TS的设计目标确定的,所谓by design是也。(其他答案也都提到了这一点。)
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...△=口+口+口,问△、o、口谁大谁小,小学一年级数学期末附加题_百度知 ... 一年级数学△ +△ +〇 +〇 +〇=27,△ +△+ 〇 +〇+ △ +△=22问△=... 上海南浦大桥长途客运中心到虹桥机场第二航站楼怎么走? 上海浦东国际机场2号航站到上海长途汽车客运总站,最快怎么走,用时多少... 从上海长途汽车客运总站到虹桥机场2号航站楼 木头爱上烈火简介 省直遴选面向哪些群体? 义务教育阶段的学生有什么权利和义务? ngclz型带制动轮鼓形齿式联轴器内容简介 GⅡCL型基本型(窄型)鼓形齿式联轴器基本参数 应收账款风险有哪些? 应收账款风险怎么控制? 企业如何权衡应收账款带来的收益及可能面临的风险? 如何防范应收账款风险 微信怎么设计自己的位置 电影金刚川播出后网友都是如何吐槽和评价的呢? 《金刚川》这部电影你觉得好看吗?有没有让你感动落泪呢? 淘宝上有没有靠谱的卖苹果手机的店铺最好是可以24期分期免息的 电影《金刚川》2天票房2.4亿,顶配+真实,为何豆瓣评分却跌至6.7? 金刚川的影评不好,说是重复太多,电影哪里重复了? 怎样评价电影《金刚川》? 金刚川观后感 《金刚川》这部电影你认为怎么样,有哪些值得观看的地方? 你观影《金刚川》的第一感受怎么样? 如何评价《金刚川》这部电影作品? 电影《金刚川》将在韩国上线,这部剧的口碑如何? 卧室里放置钟表,对于睡眠质量有没有影响? 电影《金刚川》评分最高的点赞评论为何令人心寒? 挂钟挂在进卧室门上好不好? 豆瓣6.9分,为何电影《金刚川》赢了票房却输了口碑? 请问java中重写和重载的区别是什么?能不能举一个重载的例子呢?谢谢! Java中,方法重载和方法重写各有什么要求,有什么区别? java中方法重载和函数重载的区别是什麼??? Java中重载跟重写的区别,解释要详细一些啊 轻卡货车什么牌子的好? 什么是综合交通运输体系? 求解决STL的set的以坐标结构体为关键字的<运算符重载问题 求助C课程设计 C++ 关于error C2248: : 无法访问 private 成员(在“。。。”类中声明)的问题 刑事申诉驳回后还可以再申诉吗? 抗诉申请被驳回后还能继续申诉吗 驳回申请再审可以再申诉吗 再审申请被最高院驳回还能向最高院申诉吗? 刑事申诉驳回后还可以申诉吗 如果刑事申诉被驳回后还能再申诉吗 刑事案件被刑诉机关驳回后多久才可以再申诉呢? 二审驳回后可以再上诉吗 提出申诉被驳回后,能否再次提出申诉? 二审没有上诉,再审驳回以后就不可以申请再审了吗? 再审申请被省高院驳回后如何申诉?