我有一个函数可以减少属性数组并构建一个对象:
type FieldProps = {
name: string;
value: string;
required: boolean;
styles?: object;
className?: string
}
const fields: FieldProps[] = [
{
name: "firstName",
value: "Bob",
required: true,
styles: { width: "100%"}
},
{
name: "lastName",
value: "Smith",
required: true,
className: "example"
},
{
name: "city",
value: "Tulsa",
required: true,
},
{
name: "state",
value: "OK",
required: true,
},
]
const parseFields = <T extends any[], K extends object = {}>(fields: T): K => {
try {
if (!fields || (fields && fields.length < 0)) throw new Error("You must supply an array of fields!");
const parsedFields = fields.reduce((acc, { name, value }: { name: string, value: string}) => {
switch (name) {
case "city":
case "street":
case "state":
case "suite":
case "zipCode": {
acc["address"] = acc["address"] || {};
if (value) acc.address[name] = value;
break;
}
default: {
acc[name] = value;
break;
}
}
return acc;
}, {} as K);
return parsedFields;
} catch (err) {
throw String(err);
}
};
const userDetails = parseFields(fields);
截至目前,悬停在上方userDetails会显示一个空对象类型( {}),理想情况下应该是:
{
"firstName": string,
"lastName": string,
"address": {
"city": string,
"state": string
}
}
我如何重构函数以获取类型FieldProps[]并让它返回动态类型的对象?
有只小跳蛙
长风秋雁
智慧大石
相关分类