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` 👍