Reputation: 7672
say I have
type Person = {
name: string
hobbies: Array<string>
}
and then this: const people: Array<Person> = [{name: "rich", age: 28}]
how do I add age AND replace hobbies with say a different type (Array<number>
) to keep it simple
I know I can use omit
to get rid of a property or intersections to add a property but I'm struggling to work it out
Obviously this is wrong but I want something like that
type Hobbies = Array<number>
type NewPerson = Omit<Person, "hobbies"> & Hobbies & Age
const people: Array<NewPerson> = [{name: "rich", age: 28, hobbies: [1,2,3]}]
Upvotes: 1
Views: 65
Reputation: 1075049
You're right you'd use Omit
and an intersection. To remove hobbies
and add age
you'd do Omit
and intersect with an object type defining age
and the new version of hobbies
:
type Person = {
name: string;
hobbies: Array<string>;
};
type NewPerson = Omit<Person, "hobbies"> & { age: number, hobbies: number[] };
const people: Array<NewPerson> = [{ name: "rich", age: 28, hobbies: [1,2,3] }];
Upvotes: 2
Reputation: 136
Maybe the example below helps.
type NewPerson = Omit<Person, "hobbies"> & { hobbies: Array<number>, age: number }
const people: Array<NewPerson> = [{name: "rich", age: 28, hobbies: [1, 2, 3]}]
Use the Omit type to remove the hobbies property from the Person type and then add in the new hobbies and age properties.
Upvotes: 2
Reputation: 250056
You neet to intersect with object types that have the extra properties you want to add
type Hobbies = { numbers: Array<number>}
type NewPerson = Omit<Person, "hobbies"> & Hobbies & { age: number }
const people: Array<NewPerson> = [{name: "rich", age: 28, numbers: [1,2,3]}]
Upvotes: 2