【发布时间】:2021-12-21 06:20:41
【问题描述】:
尝试键入一个柯里化函数,该函数首先接受一个函子,然后是一个对象
type TestType = {
x: number;
y: number;
hello: string;
};
type CordinateType = {
data: TestType;
id: string;
};
const transform = <T extends object, K extends keyof T>(
fntor: (val: T[K]) => any
) => (obj: T) =>
Object.entries(obj).reduce((acc, [k, v]) => ({ ...acc, [k]: fntor(v) }), {});
const testData: CordinateType = {
id: "uuid-222-uuid",
data: {
x: -3,
y: 2,
hello: "test"
}
};
const positive = (x) => (Number.isInteger(x) ? Math.abs(x) : x);
const result = { ...testData, data: transform(positive)(testData) };
console.log("result", result);
Transform 是一个简单的函数,它接受函子并在对象上进行映射。
主要问题是 result.data 的类型是{},而应该是TestType
这是示例反应应用程序,setState 钩子函数无法推断出正确的类型
【问题讨论】:
标签: typescript react-hooks functor currying generic-type-argument