Начиная с машинописного текста 2.0, вы можете использовать размеченные объединения с перечислением в качестве дискриминанта следующим образом:
export function getInstance(code: Enum.Type1, someParam: OtherType1): MyReturnType1;
export function getInstance(code: Enum.Type2, someParam: OtherType2): MyReturnType2;
export function getInstance(code: Enum, someParam: UnionOfOtherTypes): UnionOfReturnTypes {
switch (code) {
case Enum.Type1:
return new ReturnType1(someParam as OtherType1);
case Enum.Type2:
return new ReturnType2(someParam as OtherType2);
}
}
Начиная с TypeScript 2.3
- Это идиоматический способ сделать это?
- Можем ли мы определить тип someParam без приведения типов?
- Можем ли мы упростить определения типов, возможно, используя обобщения, изменив параметры функции и т. Д., Поэтому нам нужно определить только последнюю функцию?
- Можно ли объявить функции как константы, например:
const getInstance = () => {};