我想用函数修饰符的链修改数据,但要在打字脚本中正确键入.这个是可能的吗?
const addA = (data: {}) => {
return {
...data,
a: "test"
}
}
const addB = (data: {}) => {
return {
...data,
b: "test"
}
}
const updateA = (data: {a:string}) => {
return {
...data,
a: data.a + " test"
}
}
const func = <T extends ((data: Record<string, any>) => Record<string, any>)[]>(modifiers: T): unknown => {
return modifiers.reduce((acc, modifier) => {
return modifier(acc)
}, {})
}
console.log(func([addA])) // Pass, Should pass.
console.log(func([addA, addB])) // Pass, Should pass.
console.log(func([addA, addB, updateA])) // Error, Should pass.
console.log(func([updateA])) // Error, Should error. Unexpected runtime undefined value.