Hier ist eine besondere Version von Object.assign
die den Variablentyp bei jeder Eigenschaftsänderung automatisch anpasst. Zusätzliche Variablen, Typ-Assertions, explizite Typen oder Objektkopien sind nicht erforderlich:
function assign<T, U>(target: T, source: U): asserts target is T & U {
Object.assign(target, source)
}
const obj = {};
assign(obj, { prop1: "foo" })
// const obj now has type { prop1: string; }
obj.prop1 // string
assign(obj, { prop2: 42 })
// const obj now has type { prop1: string; prop2: number; }
obj.prop2 // number
// const obj: { prop1: "foo", prop2: 42 }
Anmerkung: Die Muster macht Gebrauch von TS 3.7 Behauptungsfunktionen . Der Rückgabetyp von assign
es void
im Gegensatz zu Object.assign
.