Hur man utelämnar en egenskap från en partial<type> i Typescript?
Jag vill tillåta en delvis utan att tillåta ett id för en TypeScript-metoduppdatering som ser ut så här:
update(id: number, newObject:Omit<Partial<Object>,id>): CustomObject {
const index = this.objects.findIndex(
(object: CustomObject) => object.id == id
);
this.objects[index] = {
...this.objects[index],
...newObject
};
return this.object[index];
}
Detta tillvägagångssätt verkar dock misslyckas eftersom jag fortfarande kan skicka ett objekt med id:t.
Svar #1
Genom att separera id-fältet från en basklass kan du helt enkelt använda basklassen som kontrakt och därmed utelämna id-fältet. Självklart kan du utöka den klassen med id-fältet där det är nödvändigt.
Svar #2
Jag använder en generisk typ så här:
export type PickPartial<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>> & Partial<Pick<T, K>>
Används så här:
type MyType = PickPartial<{ hat: string, cat: string, dog: string }, "cat" | "dog">
const obj: MyType = { hat: "top hat" };
// compiles successfully
const obj2: MyType = { hat: "beanie", cat: "fluffy" };
// compiles successfully
const obj3: MyType = { hat: "cowboy hat", cat: "fluffy", dog: "buddy" };
// compiles successfully
const obj4: MyType = { cat: "fluffy", dog: "buddy" };
// error: 'hat' is missing
