[英]Generic Nullable return types depends on params
使用 tsconfig.json strict: true
,我有以下類型
type Nullable<T> = T | null | undefined
然后,我有一個 function 接受可空數據並返回不同類型的可空數據,例如:
const transformA: (a: Nullable<A1>) => Nullable<A2>
它運作良好。 但是當使用transformA
時,它總是返回 Nullable ,這使得下游可以為空。
如果我已經確保transformA
的輸入不可為空,我希望transformA
的返回也不可為空。
const transformA: (a: A1) => A2
為此目的聲明 2 個函數我認為這太多了,因為我有大量這樣的轉換函數。 所以我想使用過載 function
function transformA(a: A1): A2;
function transformA(a: Nullable<A1>): Nullable<A2>;
function transformA(a: A1 | Nullable<A1>): A2 | Nullable<A2> {...}
IMO,這不是很簡潔和好看。 我在想:
const transformA: <A1, A2>(a: MayBeNullable<A1>): NullableIfInputNullable<A2>
或類似的東西。
我的願望是:
const a1: Nullable<A1>
const ret1 = transformA(a1) // ret1 can infer to Nullable<A2>
const a2: A1
const ret2 = transformA(a2) // ret2 infer to A2, not Nullable<A2>
可行嗎? 歡迎任何反饋
您可以使 function 通用,並使返回類型成為可以在多個地方重用的條件類型:
type Nullable<T> = T | null | undefined
type NullIfInputIsNull<C, T> = C extends null | undefined ? null | undefined : T
function transformA<T extends Nullable<A1>>(a: T): NullIfInputIsNull<T, A2> {
return a as any;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.