【发布时间】:2017-11-05 00:19:16
【问题描述】:
是否可以使用带有枚举参数的重载函数执行类型推断?例如,假设我正在尝试创建一个返回类型取决于枚举值的工厂函数:
enum Colors {
Red,
Green
};
abstract class Box { };
class RedBox extends Box { };
class GreenBox extends Box { };
class BoxFactory {
static createBox(color: Colors.Red): RedBox;
static createBox(color: Colors): Box {
switch (color) {
case Colors.Red:
return new RedBox();
case Colors.Green:
return new GreenBox();
}
}
}
function makeMeABox(color: Colors) {
// Argument of type 'Colors' is not assignable to parameter of type 'Colors.Red'
return BoxFactory.createBox(color);
}
如果我生成一个声明文件,一般的重载甚至不会出现。但是,如果我删除 static createBox(color: Colors.Red): RedBox; 的重载,一切都会好起来的。
【问题讨论】:
-
即使在 Java 和 C++ 等静态类型语言中,返回类型也不会被视为函数签名的一部分
标签: typescript