打字稿-函数无法返回未定义

时间:2018-12-04 12:09:47

标签: typescript

我定义了此功能:

const getOrDefault = <T>(a: T, b: T): T => (a != null ? a : b)

表达a的正确方法是null/undefined,但b不能,并且函数总是返回有效值吗?

到目前为止,它返回undefined | T

1 个答案:

答案 0 :(得分:3)

您可以使用条件类型ExcludeT nullundefined中排除:

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
相关问题