是否有可能使用帶枚舉參數的重載函數執行類型推斷?例如,說我想做一個工廠函數返回類型取決於枚舉值:使用枚舉參數重載函數的類型推斷?
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++ – Dummy