Возьмите следующий минимальный пример:
type BinaryOp = 'MOV'
type UnaryOp = 'ADD' | 'SUB' | 'JRO'
const BinaryOps: BinaryOp[] = ['MOV']
const UnaryOps: UnaryOp[] = ['ADD', 'SUB', 'JRO']
type Line =
{ op: BinaryOp, a: number, b: number }
| { op: UnaryOp, a: number }
И следующее «сопоставление с образцом»:
switch (line.op) {
case 'ADD':
case 'SUB':
case 'JRO':
return `${line.op} ${line.a}`
case 'MOV':
return `${line.op} ${line.a}, ${line.b}`
}
Мне это не особо нравится, чтобы кейс понялОперация UnaryOp
или BinaryOp
, я должен перечислить все возможности.Есть ли компактный (er) способ добиться этого?
ПРИМЕЧАНИЕ. Учтите, что это упрощенный пример, и могут существовать другие виды Op
.