typescript - 创建一个函数类型,该函数类型返回带有可能额外道具的参数对象
问题描述
我正在寻找一个函数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 允许无关的属性,因此您不需要任何额外的处理来允许返回类型上的那些。
推荐阅读
- html - 创建标题/内容 CSS 网格布局的更简洁方法
- dynamics-crm - 我无法在 Dynamics365 中禁用用户
- javascript - 将每个字母更改为大写并将其括在括号中
- arrays - 使用 apply 从矩阵构建特征张量
- python - 读取文件并在 tkinter 中写入行的 Python 函数
- etl - 组合不同的数据流并通过排序输出创建 .txt 文件
- python - 如何避免指数项的数值溢出错误?
- javascript - JS总时间计算
- dwarf - 为什么使用 TAG_variable 和 TAG_base_type 冗余属性 DW_AT_endianity?
- javascript - 如何在 Aframe 中更改相机或热点位置