簡體   English   中英

通用 Nullable 返回類型取決於參數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM