const objectKeys = Object . keys || function ( obj ) { const keys = [ ] ; for ( const key in obj ) { if ( { } . hasOwnProperty . call ( obj , key ) ) keys . push ( key ) ; } return keys ; } ; export default function assign < T , K extends keyof T > ( obj , newKey , newValue ) { const keys = objectKeys ( obj ) ; const copy = { } as T ; for ( let i = 0 , l = keys . length ; i < l ; i ++ ) { const key = keys [ i ] ; copy [ key as keyof T ] = obj [ key as keyof T ] ; } copy [ newKey ] = newValue ; return copy ; }