-
Notifications
You must be signed in to change notification settings - Fork 568
/
dtoHelper.ts
38 lines (35 loc) 路 1.14 KB
/
dtoHelper.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import { getClassExtendedMetadata, saveClassMetadata } from '@midwayjs/core';
import { RULES_KEY } from './constants';
export interface Dto<T> {
new (): T;
}
export function PickDto<T, K extends keyof T>(
dto: Dto<T>,
keys: K[]
): Dto<Pick<T, (typeof keys)[number]>> {
const pickedDto: any = function () {};
pickedDto.prototype = dto.prototype;
const fatherRule = getClassExtendedMetadata(RULES_KEY, dto);
const pickedRule: any = {};
for (const key of keys) {
if (fatherRule[key]) {
pickedRule[key] = fatherRule[key];
}
}
saveClassMetadata(RULES_KEY, pickedRule, pickedDto);
return pickedDto as Dto<Pick<T, (typeof keys)[number]>>;
}
export function OmitDto<T, K extends keyof T>(
dto: Dto<T>,
keys: K[]
): Dto<Omit<T, (typeof keys)[number]>> {
const pickedDto: any = function () {};
pickedDto.prototype = dto.prototype;
const fatherRule = getClassExtendedMetadata(RULES_KEY, dto);
const pickedRule: any = Object.assign({}, fatherRule);
for (const key of keys) {
delete pickedRule[key];
}
saveClassMetadata(RULES_KEY, pickedRule, pickedDto);
return pickedDto as Dto<Omit<T, (typeof keys)[number]>>;
}