Discriminated union diff

Created Diff never expires
17 remoções
Linhas
Total
Removido
Palavras
Total
Removido
Para continuar usando este recurso, atualize para
Diffchecker logo
Diffchecker Pro
29 linhas
17 adições
Linhas
Total
Adicionado
Palavras
Total
Adicionado
Para continuar usando este recurso, atualize para
Diffchecker logo
Diffchecker Pro
29 linhas
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,
}
}
}
}