Skip to content

Commit 12e6524

Browse files
committed
feat: add pick method
1 parent ea6698f commit 12e6524

File tree

3 files changed

+39
-3
lines changed

3 files changed

+39
-3
lines changed

src/omit.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
1-
export default function omit<T extends object, K extends keyof T>(
1+
function omit<T extends object, K extends keyof T>(
22
obj: T,
33
fields: K[] | readonly K[],
44
): Omit<T, K> {
55
const clone = Object.assign({}, obj);
66

77
if (Array.isArray(fields)) {
8-
fields.forEach(key => {
8+
for (const key of fields) {
99
delete clone[key];
10-
});
10+
}
1111
}
1212

1313
return clone;
1414
}
15+
16+
export default omit;

src/pick.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
const pick = <T extends object, K extends keyof T>(
2+
obj: T,
3+
fields: K[] | readonly K[],
4+
): Pick<T, K> => {
5+
const result = {} as Pick<T, K>;
6+
7+
if (Array.isArray(fields)) {
8+
for (const key of fields) {
9+
result[key] = obj[key];
10+
}
11+
}
12+
13+
return result;
14+
};
15+
16+
export default pick;

tests/pick.test.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import pick from '../src/pick';
2+
3+
describe('pick', () => {
4+
it('should work', () => {
5+
const ret = pick({ a: 1, b: 2, c: 3 }, ['a', 'b']);
6+
expect(ret).toEqual({ a: 1, b: 2 });
7+
});
8+
9+
it('invalidate array', () => {
10+
const ret = pick({ test: 1 }, null);
11+
expect(ret).toEqual({});
12+
});
13+
14+
it('readonly array', () => {
15+
const ret = pick({ a: 1, b: 2 }, ['a'] as const);
16+
expect(ret).toEqual({ a: 1 });
17+
});
18+
});

0 commit comments

Comments
 (0)