🔎 搜索词
实现包含重载的类成员
🕗 版本与回归信息
- 在所有我尝试过的版本中,这种行为都是如此,我也查看了关于重载类成员函数的常见问题解答条目。
⏯ Playground链接
https://www.typescriptlang.org/play?ts=5.2.2#code/FAYwNghgzlAEDCwDexZtgMwPZYBSwgH5YAuWAOwFcBbAIwFMAnWASlNgDcsBLAEwG5U6bHgLsqdJgBpYtcTQbM2ZLn0HpMOfBHmTGM2sTITFrdqt5C0KDRpBZyULGHoA6MFgDm+AC4BPAAd6LAwxFn5YAHpI2H8gkLFuOBMmK1gAX2BM4HJ6AHcEXBZXESKIqJiAxm5yHzgAIkpyXnoMGvpeeuAgA
💻 代码
class C
{
foo( a? : number ) : void;
foo( a : number, b : number ) : void;
foo( a : number, b? : number ) : void
{
console.log( typeof a ); // typeof a is number
}
}
new C().foo(); // prints "undefined"
🙁 实际行为
编译成功。
函数foo中的参数"a"的类型是number,但打印出的是"undefined",这是错误的。
由于foo的实现签名没有包含所有重载签名,所以编译应该失败。
🙂 预期行为
编译应该失败。
1条答案
按热度按时间yfjy0ee71#
我同意这是一个bug。在比较重载实现和重载列表时,我们不应该考虑方法二元性。
这个错误很可能会导致大量不必要的中断,最终导致我们拒绝修复 🫠