Typescript - função não pode retornar indefinido
Eu defini esta função:
const getOrDefault = <T>(a: T, b: T): T => (a != null ? a : b)
qual é a maneira correta de expressar que a pode ser null/undefined mas b não pode, e a função sempre retorna um valor válido?
Até agora ele retorna undefined | T
Resposta #1
Você pode usar o tipo condicional Exclude para excluir de T null ou undefined:
const getOrDefault = <T>(a: T, b: Exclude<T, null | undefined>): Exclude<T, null | undefined> => (a !== null ? a : b) as Exclude<T, null | undefined>
declare let a: string | null
getOrDefault(a, null) // error
getOrDefault(a, undefined) // error
getOrDefault(a, "") // ok
declare let b: string | undefined
getOrDefault(b, null) // error
getOrDefault(b, undefined) // error
getOrDefault(b, "") // ok
declare let c: string;
getOrDefault(c, null) // error
getOrDefault(c, undefined) // error
getOrDefault(c, "") // ok
