Discriminated union diff
17 removals
Words removed | 25 |
Total words | 79 |
Words removed (%) | 31.65 |
29 lines
17 additions
Words added | 20 |
Total words | 74 |
Words added (%) | 27.03 |
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,
}
}
}
}