From b3bc924278c3f94ff9671c78336f02a493f7b749 Mon Sep 17 00:00:00 2001 From: Mark Sh Date: Tue, 8 Feb 2022 16:37:51 +0200 Subject: [PATCH] fix: failed to resolve type for typeof static class property --- src/NodeParser/TypeofNodeParser.ts | 6 +++++- test/valid-data-type.test.ts | 1 + .../type-typeof-class-static-property/main.ts | 5 +++++ .../type-typeof-class-static-property/schema.json | 10 ++++++++++ 4 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 test/valid-data/type-typeof-class-static-property/main.ts create mode 100644 test/valid-data/type-typeof-class-static-property/schema.json diff --git a/src/NodeParser/TypeofNodeParser.ts b/src/NodeParser/TypeofNodeParser.ts index 30c226ac5..13f0aefa3 100644 --- a/src/NodeParser/TypeofNodeParser.ts +++ b/src/NodeParser/TypeofNodeParser.ts @@ -24,7 +24,11 @@ export class TypeofNodeParser implements SubNodeParser { const valueDec = symbol.valueDeclaration!; if (ts.isEnumDeclaration(valueDec)) { return this.createObjectFromEnum(valueDec, context, reference); - } else if (ts.isVariableDeclaration(valueDec) || ts.isPropertySignature(valueDec)) { + } else if ( + ts.isVariableDeclaration(valueDec) || + ts.isPropertySignature(valueDec) || + ts.isPropertyDeclaration(valueDec) + ) { if (valueDec.type) { return this.childNodeParser.createType(valueDec.type, context); } else if (valueDec.initializer) { diff --git a/test/valid-data-type.test.ts b/test/valid-data-type.test.ts index d5fd2d366..a1abf173c 100644 --- a/test/valid-data-type.test.ts +++ b/test/valid-data-type.test.ts @@ -59,6 +59,7 @@ describe("valid-data-type", () => { it("type-typeof", assertValidSchema("type-typeof", "MyType")); it("type-typeof-value", assertValidSchema("type-typeof-value", "MyType")); it("type-typeof-object-property", assertValidSchema("type-typeof-object-property", "MyType")); + it("type-typeof-class-static-property", assertValidSchema("type-typeof-class-static-property", "MyType")); it("type-typeof-enum", assertValidSchema("type-typeof-enum", "MyObject")); it("type-typeof-class", assertValidSchema("type-typeof-class", "MyObject")); it("type-keys", assertValidSchema("type-typeof-keys", "MyType")); diff --git a/test/valid-data/type-typeof-class-static-property/main.ts b/test/valid-data/type-typeof-class-static-property/main.ts new file mode 100644 index 000000000..78a59a5a0 --- /dev/null +++ b/test/valid-data/type-typeof-class-static-property/main.ts @@ -0,0 +1,5 @@ +class Foo { + static bar = "foo" +} + +export type MyType = typeof Foo.bar; diff --git a/test/valid-data/type-typeof-class-static-property/schema.json b/test/valid-data/type-typeof-class-static-property/schema.json new file mode 100644 index 000000000..6ca667af6 --- /dev/null +++ b/test/valid-data/type-typeof-class-static-property/schema.json @@ -0,0 +1,10 @@ +{ + "$ref": "#/definitions/MyType", + "$schema": "http://json-schema.org/draft-07/schema#", + "definitions": { + "MyType": { + "const": "foo", + "type": "string" + } + } +}