Pesquisa de site

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

Artigos relacionados