![](/img/trans.png)
[英]Infer types on return value of function, where function parameter is a record of functions
[英]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.