Skip to content

Commit 80b8520

Browse files
authored
Merge pull request #12 from HUxiaoAlinNG/master
增加Pick/Omit对type 联合类型的支持
2 parents 6c07441 + 46f2a9e commit 80b8520

File tree

8 files changed

+79
-10
lines changed

8 files changed

+79
-10
lines changed

jest/generic.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,4 +45,6 @@ interface Generic_11<T = Generic_8<string>> {
4545
value: T[];
4646
}
4747

48-
type Generic_12 = Generic_11
48+
type Generic_12 = Generic_11
49+
50+
type Generic_13 = Generic_11<string>

jest/toolfn.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,3 +66,8 @@ type ToolFn_15 = Record<Page, string>;
6666
// interface ToolFn_18 {
6767
// name: Record<Page, PageInfo>
6868
// }
69+
70+
type Filter = 'a' | 'b';
71+
type ToolFn_16 = Pick<AAA, Filter>;
72+
73+
type ToolFn_17 = Omit<AAA, Filter>;

src/__tests__/__snapshots__/generic.test.ts.snap

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,3 +239,22 @@ Object {
239239
"type": "object",
240240
}
241241
`;
242+
243+
exports[`Generic默认值_类型_3 1`] = `
244+
Object {
245+
"additionalProperties": false,
246+
"definitions": Object {},
247+
"properties": Object {
248+
"value": Object {
249+
"items": Object {
250+
"type": "string",
251+
},
252+
"type": "array",
253+
},
254+
},
255+
"required": Array [
256+
"value",
257+
],
258+
"type": "object",
259+
}
260+
`;

src/__tests__/__snapshots__/toolfn.test.ts.snap

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,21 @@ Object {
5151
}
5252
`;
5353

54+
exports[`工具函数Omit_4 1`] = `
55+
Object {
56+
"additionalProperties": false,
57+
"properties": Object {
58+
"c": Object {
59+
"type": "boolean",
60+
},
61+
},
62+
"required": Array [
63+
"c",
64+
],
65+
"type": "object",
66+
}
67+
`;
68+
5469
exports[`工具函数Pick_1 1`] = `
5570
Object {
5671
"properties": Object {
@@ -80,6 +95,25 @@ Object {
8095
}
8196
`;
8297

98+
exports[`工具函数Pick_3 1`] = `
99+
Object {
100+
"additionalProperties": false,
101+
"properties": Object {
102+
"a": Object {
103+
"type": "number",
104+
},
105+
"b": Object {
106+
"type": "string",
107+
},
108+
},
109+
"required": Array [
110+
"a",
111+
"b",
112+
],
113+
"type": "object",
114+
}
115+
`;
116+
83117
exports[`工具函数Record_1 1`] = `
84118
Object {
85119
"additionalProperties": false,

src/__tests__/generic.test.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@ test('Generic默认值_类型_2', () => {
3030
expect(getSchema('Generic_12')).toMatchSnapshot();
3131
});
3232

33+
test('Generic默认值_类型_3', () => {
34+
expect(getSchema('Generic_13')).toMatchSnapshot();
35+
});
36+
3337
test('Generic多层对象_类型_1', () => {
3438
expect(getSchema('Generic_9')).toMatchSnapshot();
3539
});

src/__tests__/toolfn.test.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ test('工具函数Omit_3', () => {
2222
expect(getSchema('ToolFn_3')).toMatchSnapshot();
2323
});
2424

25+
test('工具函数Omit_4', () => {
26+
expect(getSchema('ToolFn_17')).toMatchSnapshot();
27+
});
28+
2529
// test('工具函数Omit_4', () => {
2630
// expect(getSchema('ToolFn_4')).toMatchSnapshot();
2731
// });
@@ -50,6 +54,10 @@ test('工具函数Pick_2', () => {
5054
expect(getSchema('ToolFn_10')).toMatchSnapshot();
5155
});
5256

57+
test('工具函数Pick_3', () => {
58+
expect(getSchema('ToolFn_16')).toMatchSnapshot();
59+
});
60+
5361
// test('工具函数Pick_3', () => {
5462
// expect(getSchema('ToolFn_11')).toMatchSnapshot();
5563
// });

src/get-jsonschema-from-data.ts

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ export default class genTypeSchema extends typescriptToFileDatas {
232232
if (file) {
233233
this.extendJsonData(file, name, realRef);
234234
}
235-
fileJson[name] = _.cloneDeep(realRef);
235+
fileJson[name] = fileJson[name] || _.cloneDeep(realRef);
236236
}
237237
// 对象类型
238238
if (result.properties && Object.keys(result.properties)) {
@@ -311,6 +311,7 @@ export default class genTypeSchema extends typescriptToFileDatas {
311311

312312
// 兼容import外部引入与内部引用两种方式
313313
let $refJson = fileJson[firstKey] || fileJson[$refKey] || {};
314+
$refJson = _.cloneDeep($refJson)
314315
if ((entry as any).keySet.has($refKey)) {
315316
(entry as any).refKeyTime[$refKey] = ((entry as any).refKeyTime[$refKey] || 0) + 1;
316317
return;
@@ -448,6 +449,9 @@ export default class genTypeSchema extends typescriptToFileDatas {
448449
if (!extra) return resType;
449450

450451
if (resType) {
452+
if (extra && extra.$ref) {
453+
extra = _.cloneDeep(attrCommonHandle(extra, false) as AnyOption);
454+
}
451455
const extraKeys = extra.enum || [];
452456
if (key === 'Omit') {
453457
const res = deleteJsonSchemaKeys(resType, extraKeys);
@@ -606,13 +610,6 @@ export default class genTypeSchema extends typescriptToFileDatas {
606610
typeJson = handleExtends(typeJson);
607611
}
608612

609-
// 处理默认值
610-
if (typeJson.typeParams) {
611-
const defaultNames = handleGenericDefaultType(typeJson.properties, typeJson.typeParams);
612-
if (defaultNames.length) {
613-
delete typeJson.typeParams;
614-
}
615-
}
616613

617614
// 对象类型
618615
if (typeJson.properties && Object.keys(typeJson.properties)) {

src/typescript-to-file-datas.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ export default class typescriptToFileDatas {
5454

5555
extendJsonData(fileName: string, key: string, data: AnyOption) {
5656
this.jsonData[fileName] = this.jsonData[fileName] || {};
57-
this.jsonData[fileName][key] = data;
57+
this.jsonData[fileName][key] = this.jsonData[fileName][key] || data;
5858
}
5959

6060
/**

0 commit comments

Comments
 (0)