编辑
如果data
接受这样的代码就好了:
{
error: boolean;
errorText: string;
...anyOtherProperties
}
我在这里的用例是,我想有一个函数来验证我的表单字段,但是我需要将我的数据传递给它,它有一个唯一的接口绑定到它,然后我需要返回修改后的数据。
以下是一个示例:
const InvalidateAllFields = (error: unknown, data: UserInterface): UserInterface => {
if (error instanceof z.ZodError) {
const { fieldErrors } = error.flatten();
for (const key of Object.keys(data)) {
const indexKey = key as keyof UserInterface;
const error = fieldErrors[indexKey];
data[indexKey].error = !!error;
data[indexKey].errorText = error?.[0] ?? '';
}
}
return data;
};
由于UserInterface
的原因,我不能以其他形式使用它,只能使用具有该接口的形式。
要在多个地方使用相同的函数,需要做些什么?
1条答案
按热度按时间ddrv8njm1#
溶液
感谢@crashmstr,我做了一些研究,找到了我问题的答案。
使用泛型是解决这个问题的方法。
首先声明一个可以接收泛型并正确分析键的类型:
然后在声明函数时,重要的部分是将
DataType
扩展为泛型,然后将泛型用作data
和return
类型。现在,当你调用它,在任何需要它的地方使用它时,它只会指出你是否缺少
DataType
中需要的东西,其他任何东西都被忽略。例如:
虽然我测试了它,它对我的用例有效,但由于我还在学习打字脚本,这段代码中可能仍然有问题。