Discriminated union diff

Created Diff never expires
21 removals
29 lines
21 additions
29 lines
type Options = { foo: 'bar' }
type Common = 'c'


type ArgsRegExp = [first: RegExp, second?: Options]
type ArgsRegExp = [first: 'a0', second?: Common]
type ArgsString = [first: string, second?: string, third?: Options]
type ArgsString = [first: 'b0', second?: 'b1', third?: Common]
type Args = ArgsRegExp | ArgsString
type Args = ArgsRegExp | ArgsString


interface Params {
interface Params {
readonly pattern: RegExp
readonly custom: string
readonly options?: Options
readonly common?: Common
}
}


function getParams(args: ArgsRegExp): Params
function getParams(args: ArgsRegExp): Params
function getParams(args: ArgsString): Params
function getParams(args: ArgsString): Params
function getParams([first, second, third]: Args): Params {
function getParams([first, second, third]: Args): Params {
if (first instanceof RegExp) {
if (first === 'a0') {
return {
return {
pattern: first,
custom: first,
options: second,
common: second,
}
}
}
}


return {
return {
pattern: new RegExp(
custom:
first,
first +
second
second,
),
common: third,
options: third,
}
}
}
}