Typescript 带枚举参数的重载函数的类型推断?

Typescript 带枚举参数的重载函数的类型推断?,typescript,Typescript,是否可以使用带有枚举参数的重载函数执行类型推断?例如,假设我试图创建一个返回类型取决于枚举值的工厂函数: 枚举颜色{ 红色 绿色 }; 抽象类框{}; 类RedBox扩展了Box{}; 类GreenBox扩展了Box{}; 船级社工厂{ 静态createBox(颜色:Colors.Red):RedBox; 静态createBox(颜色:颜色):长方体{ 开关(彩色){ 外壳颜色。红色: 返回新的RedBox(); 外壳颜色。绿色: 返回新的绿盒(); } } } 函数makeMeABox(颜色

是否可以使用带有枚举参数的重载函数执行类型推断?例如,假设我试图创建一个返回类型取决于枚举值的工厂函数:

枚举颜色{
红色
绿色
};
抽象类框{};
类RedBox扩展了Box{};
类GreenBox扩展了Box{};
船级社工厂{
静态createBox(颜色:Colors.Red):RedBox;
静态createBox(颜色:颜色):长方体{
开关(彩色){
外壳颜色。红色:
返回新的RedBox();
外壳颜色。绿色:
返回新的绿盒();
}
} 
}
函数makeMeABox(颜色:颜色){
//“Colors”类型的参数不能分配给“Colors.Red”类型的参数
返回BoxFactory.createBox(颜色);
}
()


如果我生成一个声明文件,一般重载甚至不会出现。但是,如果我移除重载
staticcreatebox(color:Colors.Red):RedBox

您只缺少一个签名:

class BoxFactory {
  static createBox(color: Colors.Red): RedBox;
  static createBox(color: Colors): Box; // <--- THIS ONE
  static createBox(color: Colors): Box {
    switch (color) {
      case Colors.Red:
        return new RedBox();
      case Colors.Green:
        return new GreenBox();
    }
  } 
}

()

即使在Java和C++等静态类型语言中,返回类型也从未被视为函数签名的一部分。您的方法非常有效,谢谢!你能帮我理解为什么我们需要与函数签名相同的额外重载吗?如果重载,编译器不会解析主函数签名吗?实际实现的签名不是重载列表的一部分,这意味着在代码中只有一个签名(其中
color=Colors.Red
),我的代码为一般情况添加了第二个签名。只是在这种情况下,实现的签名与之匹配。
let a = BoxFactory.createBox(Colors.Red); // type of a is RedBox
let b = BoxFactory.createBox(Colors.Green); // type of b is Box