From e2a9444bfd57d238ddef3be99086a7226d77c6bd Mon Sep 17 00:00:00 2001 From: Daan Boer Date: Tue, 24 May 2022 16:57:17 +0200 Subject: [PATCH 1/2] Support empty mapped types --- src/NodeParser/MappedTypeNodeParser.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/NodeParser/MappedTypeNodeParser.ts b/src/NodeParser/MappedTypeNodeParser.ts index bae958e05..312332344 100644 --- a/src/NodeParser/MappedTypeNodeParser.ts +++ b/src/NodeParser/MappedTypeNodeParser.ts @@ -7,6 +7,7 @@ import { ArrayType } from "../Type/ArrayType"; import { BaseType } from "../Type/BaseType"; import { EnumType, EnumValue } from "../Type/EnumType"; import { LiteralType } from "../Type/LiteralType"; +import { NeverType } from "../Type/NeverType"; import { NumberType } from "../Type/NumberType"; import { ObjectProperty, ObjectType } from "../Type/ObjectType"; import { StringType } from "../Type/StringType"; @@ -58,6 +59,10 @@ export class MappedTypeNodeParser implements SubNodeParser { return type === undefined ? undefined : new ArrayType(type); } else if (keyListType instanceof EnumType) { return new ObjectType(id, [], this.getValues(node, keyListType, context), false); + } else if (keyListType instanceof NeverType) { + return new ObjectType(id, [], [], false); + } else if (keyListType === undefined) { + return new ObjectType(id, [], [], false); } else { throw new LogicError( // eslint-disable-next-line max-len From 5cc790be76ced1e0dd92ec48315b5e765b2be883 Mon Sep 17 00:00:00 2001 From: Daan Boer Date: Wed, 25 May 2022 16:58:11 +0200 Subject: [PATCH 2/2] Added test cases for empty mapped types --- test/valid-data-type.test.ts | 2 ++ test/valid-data/type-mapped-empty-exclude/main.ts | 1 + test/valid-data/type-mapped-empty-exclude/schema.json | 10 ++++++++++ test/valid-data/type-mapped-never/main.ts | 1 + test/valid-data/type-mapped-never/schema.json | 10 ++++++++++ 5 files changed, 24 insertions(+) create mode 100644 test/valid-data/type-mapped-empty-exclude/main.ts create mode 100644 test/valid-data/type-mapped-empty-exclude/schema.json create mode 100644 test/valid-data/type-mapped-never/main.ts create mode 100644 test/valid-data/type-mapped-never/schema.json diff --git a/test/valid-data-type.test.ts b/test/valid-data-type.test.ts index 596e3cc62..b97874501 100644 --- a/test/valid-data-type.test.ts +++ b/test/valid-data-type.test.ts @@ -95,6 +95,8 @@ describe("valid-data-type", () => { it("type-mapped-exclude", assertValidSchema("type-mapped-exclude", "MyObject", "extended")); it("type-mapped-double-exclude", assertValidSchema("type-mapped-double-exclude", "MyObject", "extended")); it("type-mapped-symbol", assertValidSchema("type-mapped-symbol", "MyObject")); + it("type-mapped-never", assertValidSchema("type-mapped-never", "MyObject")); + it("type-mapped-empty-exclude", assertValidSchema("type-mapped-empty-exclude", "MyObject")); it("type-mapped-annotated-string", assertValidSchema("type-mapped-annotated-string", "ExchangeRate", "extended")); it("type-conditional-simple", assertValidSchema("type-conditional-simple", "MyObject")); diff --git a/test/valid-data/type-mapped-empty-exclude/main.ts b/test/valid-data/type-mapped-empty-exclude/main.ts new file mode 100644 index 000000000..cd509dde4 --- /dev/null +++ b/test/valid-data/type-mapped-empty-exclude/main.ts @@ -0,0 +1 @@ +export type MyObject = { [K in Exclude<"key", "key">]: never }; diff --git a/test/valid-data/type-mapped-empty-exclude/schema.json b/test/valid-data/type-mapped-empty-exclude/schema.json new file mode 100644 index 000000000..88f128ddf --- /dev/null +++ b/test/valid-data/type-mapped-empty-exclude/schema.json @@ -0,0 +1,10 @@ +{ + "$ref": "#/definitions/MyObject", + "$schema": "http://json-schema.org/draft-07/schema#", + "definitions": { + "MyObject": { + "additionalProperties": false, + "type": "object" + } + } +} diff --git a/test/valid-data/type-mapped-never/main.ts b/test/valid-data/type-mapped-never/main.ts new file mode 100644 index 000000000..9a7847492 --- /dev/null +++ b/test/valid-data/type-mapped-never/main.ts @@ -0,0 +1 @@ +export type MyObject = { [K in never]: never }; diff --git a/test/valid-data/type-mapped-never/schema.json b/test/valid-data/type-mapped-never/schema.json new file mode 100644 index 000000000..88f128ddf --- /dev/null +++ b/test/valid-data/type-mapped-never/schema.json @@ -0,0 +1,10 @@ +{ + "$ref": "#/definitions/MyObject", + "$schema": "http://json-schema.org/draft-07/schema#", + "definitions": { + "MyObject": { + "additionalProperties": false, + "type": "object" + } + } +}