#Remove undefined type without casting?

4 messages · Page 1 of 1 (latest)

smoky pike
#

Is there a way to make ts infer the return value of this function as string if the defaultVal arg is string without having to cast is like I did in verifyArg2?

export function verifyArg<DefaultVal extends undefined | string>(
  val: string | undefined,
  defaultVal?: DefaultVal
) {
  return val ?? defaultVal
}

export function verifyArg2<DefaultVal extends undefined | string>(
  val: string | undefined,
  defaultVal?: DefaultVal
) {
  return (val ?? defaultVal) as DefaultVal extends undefined ? string | undefined : string;
}

const a = verifyArg('a', 'b') // <- a is `string | undefined` 👎
const b = verifyArg2('a', 'b') // <- b is `string` 👍
waxen quarry
#

overloads

#

a conditional over a generic as a return type is almost never what you want

smoky pike
#

thanks!