我定义了此功能:
const getOrDefault = <T>(a: T, b: T): T => (a != null ? a : b)
表达a
的正确方法是null/undefined
,但b
不能,并且函数总是返回有效值吗?
到目前为止,它返回undefined | T
答案 0 :(得分:3)
您可以使用条件类型Exclude
从T
null
或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