我希望能够重新映射对象键'prefix.suffix': value
为{prefix: { suffix: value }}
,但我挣扎如何正确键入新的重新映射对象.
如何从带有圆点的键中获取带有嵌套对象的remapsidData,并保留值类型?
export namespace LocationSchemas {
export type BasicFields = {
name: FieldProps;
region: Region;
types: Types;
"alt.number"?: FieldProps;
"alt.centreNumber"?: FieldProps;
"typeDetails.available": TypeDetails;
"typeDetails.virtual": TypeDetails;
"internal.name"?: FieldProps;
"internal.type": FieldProps;
"internal.format"?: FieldProps;
"internal.status": InternalTradingStatus;
};
export type FieldProps = {
visible: boolean;
editable: boolean;
};
export type PossibleValueAs<T> = {
value: T;
};
export type PossibleValueAsString = PossibleValueAs<string>;
export type PossibleValueAsStringArray = PossibleValueAs<string[]>;
export type PossibleValueAsIso = PossibleValueAs<{
isoCountryCode: string;
isoSubdivision?: string;
}>;
export type Types = FieldProps & {
possibleValues: PossibleValueAsStringArray[];
defaultValue?: PossibleValueAsStringArray[];
};
export type TypeDetails = FieldProps & { defaultValue: boolean };
export type Region = FieldProps & {
possibleValues: PossibleValueAsIso[];
defaultValue?: PossibleValueAsIso;
};
export type InternalTradingStatus = {
visible: boolean;
editable: boolean;
possibleValues: PossibleValueAsString[];
};
}
const remapKeys = (fields: LocationSchemas.BasicFields) => {
return Object.entries(fields).reduce((base, currentValue) => {
const [key, value] = currentValue;
if (key.includes(".")) {
const [firstHalf, secondHalf] = key.split(".");
base[firstHalf] = { ...base[firstHalf], [secondHalf]: value };
} else {
base[key] = value;
}
return base;
}, {});
};
const data: LocationSchemas.BasicFields = {
name: {
visible: true,
editable: true,
},
types: {
visible: true,
editable: true,
possibleValues: [
{
value: ["Razor"],
},
{
value: ["Deck"],
},
],
},
region: {
visible: true,
editable: true,
possibleValues: [
{
value: {
isoCountryCode: "GB",
isoSubdivision: "ENG",
},
},
{
value: {
isoCountryCode: "FR",
},
},
],
},
"alt.number": {
visible: true,
editable: true,
},
"alt.centreNumber": {
visible: true,
editable: true,
},
"typeDetails.available": {
visible: true,
editable: true,
defaultValue: false,
},
"typeDetails.virtual": {
visible: true,
editable: true,
defaultValue: false,
},
"internal.name": {
visible: true,
editable: true,
},
"internal.type": {
visible: true,
editable: true,
},
"internal.status": {
visible: true,
editable: true,
possibleValues: [
{
value: "TRADING",
},
{
value: "UNKNOWN",
},
],
},
};
const remappedData = remapKeys(data) // I want object with re-mapped keys