ts-json-schema-generator
ts-json-schema-generator copied to clipboard
feat: Support Class Mixins
Generating the schema of a type from a mixin currently throws an error:
Variant 1
input:
function Mixin() {
return class {};
}
export class DataBox extends Mixin() {}
error:
TypeError: Cannot read property 'flags' of undefined
at ExpressionWithTypeArgumentsNodeParser.createType (/node_modules/ts-json-schema-hema-generator/dist/src/NodeParser/ExpressionWithTypeArgumentsNodeParser.js:15:24)
at ChainNodeParser.createType (/node_modules/ts-json-schema-generator/dist/src/Chac/ChainNodeParser.js:27:54)
at AnnotatedNodeParser.createType (/node_modules/ts-json-schema-generator/dist/srct/src/NodeParser/AnnotatedNodeParser.js:15:47)
at /node_modules/ts-json-schema-generator/dist/src/NodeParser/InterfaceAndClassNodssNodeParser.js:64:72
at Array.map (<anonymous>)
at /node_modules/ts-json-schema-generator/dist/src/NodeParser/InterfaceAndClassNodssNodeParser.js:64:31
at Array.reduce (<anonymous>)
at InterfaceAndClassNodeParser.getBaseTypes (/node_modules/ts-json-schema-generatoerator/dist/src/NodeParser/InterfaceAndClassNodeParser.js:62:37)
at InterfaceAndClassNodeParser.createType (/node_modules/ts-json-schema-generator/ator/dist/src/NodeParser/InterfaceAndClassNodeParser.js:40:53)
at AnnotatedNodeParser.createType (/node_modules/ts-json-schema-generator/dist/srct/src/NodeParser/AnnotatedNodeParser.js:15:47)
Variant 2
input:
function Timestamped<T extends new (...args: any[]) => any>(Base: T) {
return class _Timestamped extends Base {
timestamp = Date.now();
};
}
class Person {}
export const PersonTimestamped = Timestamped(Person);
export type DataBox = InstanceType<typeof PersonTimestamped>;
error:
TypeError: Cannot read property '0' of undefined
at CallExpressionParser.createType (node_modules/ts-json-schema-generator/dist/src/NodeParser/CallExpressionParser.js:17:87)
at ChainNodeParser.createType (node_modules/ts-json-schema-generator/dist/src/ChainNodeParser.js:27:54)
at TypeofNodeParser.createType (node_modules/ts-json-schema-generator/dist/src/NodeParser/TypeofNodeParser.js:20:41)
at ChainNodeParser.createType (node_modules/ts-json-schema-generator/dist/src/ChainNodeParser.js:27:54)
at node_modules/ts-json-schema-generator/dist/src/NodeParser/TypeReferenceNodeParser.js:38:62
at Array.forEach (<anonymous>)
at TypeReferenceNodeParser.createSubContext (node_modules/ts-json-schema-generator/dist/src/NodeParser/TypeReferenceNodeParser.js:37:32)
at TypeReferenceNodeParser.createType (node_modules/ts-json-schema-generator/dist/src/NodeParser/TypeReferenceNodeParser.js:31:121)
at ChainNodeParser.createType (node_modules/ts-json-schema-generator/dist/src/ChainNodeParser.js:27:54)
at TypeAliasNodeParser.createType (node_modules/ts-json-schema-generator/dist/src/NodeParser/TypeAliasNodeParser.js:30:67)
I also ran into this while trying to use the class remapping tools from NestJS: https://docs.nestjs.com/techniques/validation#mapped-types It would be really powerful to be able to generate correct schemas from validators of this kind.