To map a deep partial in Typescript to another deep partial, you can use a combination of Partial
and Record
types along with the keyof
operator.
Here is an example code snippet:
type DeepPartial<T> = {
[P in keyof T]?: T[P] extends (infer U)[] ? DeepPartial<U>[] : DeepPartial<T[P]>;
};
interface Person {
name: string;
age: number;
address: {
street: string;
city: string;
zipcode: string;
};
}
type PartialPerson = DeepPartial<Person>;
function mapPartialPerson(partialPerson: PartialPerson): PartialPerson {
const result: PartialPerson = {};
for (const key in partialPerson) {
if (partialPerson.hasOwnProperty(key)) {
const value = partialPerson[key];
if (typeof value === "object" && value !== null) {
result[key] = mapPartialPerson(value);
} else {
result[key] = value;
}
}
}
return result;
}
const partialPerson: PartialPerson = {
name: "John",
address: {
city: "New York",
},
};
const mappedPartialPerson = mapPartialPerson(partialPerson);
console.log(mappedPartialPerson);
// Output: { name: 'John', address: { city: 'New York' } }
In this example, we define the DeepPartial
type that recursively makes each property optional in a given type. Then, we define the mapPartialPerson
function that takes a PartialPerson
as input and returns another PartialPerson
object by recursively mapping all its nested properties.
Note that in the mapPartialPerson
function, we check if the property value is an object and recursively call the mapPartialPerson
function on it if it is. Otherwise, we just assign the value to the result object.
Please start posting anonymously - your entry will be published after you log in or create a new account. This space is reserved only for answers. If you would like to engage in a discussion, please instead post a comment under the question or an answer that you would like to discuss
Asked: 2023-05-12 06:13:38 +0000
Seen: 16 times
Last updated: May 12 '23
How can one ensure that sub-classes have uniform method parameters in TypeScript?
Can a TypeScript definition for icon names be provided in MaterialCommunityIcons for React Native?
How can TypeScript be used to save a file in an Excel add-in?
What is the Angular Type script NG Zorro event for radio buttons?
What is the process for implementing a Many to Many relationship using NestJs Sequlize and Mysql2?
What is the method for defining a Fixed length Array in TypeScript?
What difficulties are encountered in the installation of react-router-dom using typescript?