如何解决创建一个返回可能带有额外道具的参数对象的函数类型
我正在寻找创建一个函数flowLens
,该函数采用具有特殊签名/类型的函数数组。
- 该函数只能有一个参数
- 该函数的arg应该是一个普通对象
- 该函数必须在普通对象中返回所有相同的键/值类型
- 该函数可以返回额外的/新的属性。
这是我的尝试:
type Plain = {[key: string]: any};
type SpecialFunction = <T extends Plain,R extends T & Plain>(props: T) => R;
function flowLens (...fns: SpecialFunction[]) {}
const invalidType = (props: { a: number }) => true;
const invalidNotArgs = (props: { a: number }) => ({ ducks: 1 });
const validOne = (props: { a: number }) => ({...props});
const validTwo = (props: { a: number }) => ({ ...props,b: 1 });
flowLens(invalidType)
flowLens(invalidNotArgs)
flowLens(validOne)
flowLens(validTwo)
是否可以这样做?如果可以,怎么办?
解决方法
对于要在调用flowLens
时进行验证的类型,您需要移动泛型以直接参数化SpecialFunction
。以下应该起作用:
type SpecialFunction<T extends Record<string,any>> = (props: T) => T;
function flowLens<T extends any[]>(...fns: {[K in keyof T]: SpecialFunction<T[K]>}) {}
TypeScript默认情况下允许使用无关属性,因此您不需要任何其他处理即可将这些属性用于返回类型。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。