Skip to content

Commit ffb5d2d

Browse files
committed
fix: 泛型默认值,进行深度克隆,避免被覆盖
1 parent 6c07441 commit ffb5d2d

File tree

5 files changed

+29
-10
lines changed

5 files changed

+29
-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>

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__/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/get-jsonschema-from-data.ts

Lines changed: 2 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;
@@ -606,13 +607,6 @@ export default class genTypeSchema extends typescriptToFileDatas {
606607
typeJson = handleExtends(typeJson);
607608
}
608609

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

617611
// 对象类型
618612
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)