Какие подходы можно рекомендовать для выполнения чего-то похожего на сопоставление с образцом в TypeScript? Лучшее, что я придумал до сих пор, это дать уникальное значение "tag"
для каждого интерфейса с кортежами и сделать оператор switch/case на основе этого.
interface First { tag: 'one' }
interface Second { tag: 'two' }
type Third = First | Second
function match<T>(input: Third): T {
switch( input.tag ){
case 'one': {
...
}
case 'two': {
...
}
default: {
...
}
}
}
На мой взгляд, это все еще немного недружественный и непродуктивный подход к этому.
Я сам не совсем уверен, как далеко вы могли бы зайти в этом, поскольку TypeScript не является первоклассным типом, но я хотел бы попробовать.
instanceof
, но это не будет хорошей идеей -- instanceof препятствует предоставлению хороших макетов для тестирования -- интерфейсы вместо instanceof являются сильной стороной машинописного текста - person ChaseMoskal   schedule 06.05.2018