簡體   English   中英

具有返回類型應用於下一個函數的函數數組

[英]Array of functions with return types applied to next function

我正在尋找創建包含函數的唯一類型的數組。

const a = [
  (): { a: string } => ({ a: 'alpha'}),
  ({ a }): { b: string } => ({ b: 'beta' }),
  ({ a, b }): {} => ({}),
]

這些函數具有顯式的返回類型,我想要的是一種不必指定輸入類型的方法,並以某種方式將輸入類型“鏈化”,以使所有輸入類型都是針對所有返回類型的Merge堆棧中的先前功能。

如果這不可能,那么至少可以有這樣的接口:

interface State {
  a: string,
  b: string
}

並為采用State的數組創建通用類型,並將其作為部分應用於數組中每個函數的所有輸入和返回類型?

您可以根據先前的功能創建一個功能鏈,其中的一個功能取決於上一個功能,但是您需要一個功能以及要支持的每個數字功能的重載:

function chain<R1, R2, R3, R4>(fn1: ()=> R1, fn2: (a: R1) => R2, fn3: (a: R1 & R2) => R3, fn4: (a: R1 & R2 & R3) => R4) : [typeof fn1, typeof fn2, typeof fn3, typeof fn4]
function chain<R1, R2, R3>(fn1: ()=> R1, fn2: (a: R1) => R2, fn3: (a: R1 & R2) => R3) : [typeof fn1, typeof fn2, typeof fn3]
function chain<R1, R2>(fn1: ()=> R1, fn2: (a: R1) => R2) : [typeof fn1, typeof fn2]
function chain(...fns: Array<(a?: any)=> any>) : Array<(a?: any)=> any> {
    return fns;
}

const a =chain( // return types are not necessary.
    () => ({ a: 'alpha'}),
    ({ a })  => ({ b: 'beta' }),
    ({ a, b }) => ({ c: a, z:a }),
)

不太好,但這提供了一些支持:

type JourneyFn<T> = (s: Partial<T>) => Partial<T> | Promise<Partial<T>>;
type JourneyFns<T> = JourneyFn<T>[]

interface State {
  a: string,
  b: string
}

const a: JourneyFns<State> = [
  () => ({ a: 'alpha'}),
  ({ a }) => ({ b: 'beta' }),
  ({ a, b }): {} => ({}),
]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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