Discriminated union diff
17 removals
Lines | |
---|---|
Total | 29 |
Removed | -44.8%13 |
Words | |
Total | 79 |
Removed | -31.6%25 |
29 lines
17 additions
Lines | |
---|---|
Total | 29 |
Added | +44.8%13 |
Words | |
Total | 74 |
Added | +27.0%20 |
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,
}
}
}
}