Skip to content

Commit

Permalink
feat: Add assignKeys utility function (#23483)
Browse files Browse the repository at this point in the history
  • Loading branch information
zharinov committed Jul 20, 2023
1 parent 3fb7cb1 commit 8845247
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 0 deletions.
18 changes: 18 additions & 0 deletions lib/util/assign-keys.spec.ts
@@ -0,0 +1,18 @@
import { assignKeys } from './assign-keys';

describe('util/assign-keys', () => {
it('should assign values from right to left for specified keys', () => {
type Left = { a: number; b: number };
const left: Left = { a: 1, b: 2 };

type Right = { a?: number; b?: number; c?: number };
const right: Right = { a: 3, c: 4 };

const result = assignKeys(left, right, ['a', 'b']);
expect(result).toEqual({
a: 3,
b: 2,
});
expect(result).toBe(left);
});
});
18 changes: 18 additions & 0 deletions lib/util/assign-keys.ts
@@ -0,0 +1,18 @@
import is from '@sindresorhus/is';

/**
* Assigns non-nullish values from `right` to `left` for the given `keys`.
*/
export function assignKeys<
Left extends { [key in K]?: Right[key] },
Right extends { [key in K]?: any },
K extends keyof Right
>(left: Left, right: Right, keys: K[]): Left {
for (const key of keys) {
const val = right[key];
if (!is.nullOrUndefined(val)) {
left[key] = val;
}
}
return left;
}

0 comments on commit 8845247

Please sign in to comment.