Repository: vega/ts-json-schema-generator

Issue #542: Invalid index error with indexed access of optional member of generic parameter constraint
Created: 2020-10-11T23:40:13Z
Given the example:
export interface MyGeneric<T extends { a?: string; b: number }> {
    a: T["a"];
    b: T["b"];
}

export interface MyObject extends MyGeneric<{ b: number }> {}
The following output is expected:
{
  "$ref": "#/definitions/MyObject",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "definitions": {
    "MyObject": {
      "additionalProperties": false,
      "properties": {
        "b": {
          "type": "number"
        }
      },
      "required": [
        "b"
      ],
      "type": "object"
    }
  }
}
However, the generator throws the following error:
Invalid index "a" in type "structure-896447058-143-156-896447058-132-157-896447058-124-157-896447058-97-160-896447058-0-161"

Duplicate issue #1974: Invalid index in type
Created: 2024-05-27T15:34:00Z
Hello,
I'm trying to use your module to progamaticly generate JSON Schema from my defined types. Most of my custom types extends from packages types, such as Prisma. I don't have a lot of types, for here there are:
import { Prisma, Challenge } from "@prisma/client"
import { SessionRequest } from "supertokens-node/framework/fastify"
import { Certificate } from "tls"

export interface ChallengeWithStats extends Challenge {
	currentValue: number
}

export interface ExoCertificate extends Certificate {
	DC: string
}

interface RouteInterface {
	Params?: unknown
	Body?: unknown
}

export interface FastifyRequestSession<T extends RouteInterface> extends SessionRequest {
	body: T["Body"]
	params: T["Params"]
}

export interface UserWithRoles extends Prisma.UserGetPayload<{ include: { preferences: true } }>{
	roles: string[]
}

export interface SessionJsonData {
	sessionId: string
	start_date: Date
	end_date: Date
	steps: number
	distance: number
	verticalDuration: number
	walkDuration: number
	totalDuration: number
}

export interface SessionStatistics {
	total: {
		steps: number
		distance: number
		verticalDuration: number
		walkDuration: number
		totalDuration: number
	}
}
Note that all those types are located in ./src/types/**.ts, and all exported in ./src/types/index.ts.
Here is my script I'm trying to run to make my schema:
const fs = require("fs")

import("ts-json-schema-generator").then(async tsj => {
	const config = {
		path: "./src/types/index.ts",
		tsconfig: "./tsconfig.json",
		type: "*",
	}

	const outputPath = "./testSchema.json"

	const schema = tsj.createGenerator(config).createSchema(config.type)
	const schemaString = JSON.stringify(schema, null, 2)
	fs.writeFile(outputPath, schemaString, err => {
		if (err) throw err
	})
})
This file is located in ./src/generateSchema.js and i'm running the script like node ./src/schemaGenerator.js
And the output throw me this error:
file:///src/api/node_modules/ts-json-schema-generator/dist/src/NodeParser/IndexedAccessTypeNodeParser.js:60
                    throw new LogicError(`Invalid index "${type.getValue()}" in type "${objectType.getId()}"`);
                          ^

LogicError: Invalid index "exoskeleton" in type "indexed-type-1777104669-59854-59949-1777104669-59841-59950-1777104669-59839-60229-1777104669-59543-60230-1777104669-0-108983<structure-1777104669-16731-16733-1777104669-16717-16746-1777104669-16680-16747-1777104669-0-108983,structure-1777104669-16734-16737-1777104669-16717-16746-1777104669-16680-16747-1777104669-0-108983,structure-1777104669-16738-16741-1777104669-16717-16746-1777104669-16680-16747-1777104669-0-108983,structure-1777104669-16742-16745-1777104669-16717-16746-1777104669-16680-16747-1777104669-0-108983>"
    at file:///src/api/node_modules/ts-json-schema-generator/dist/src/NodeParser/IndexedAccessTypeNodeParser.js:60:27
    at Array.map (<anonymous>)
    at IndexedAccessTypeNodeParser.createType (file:///src/api/node_modules/ts-json-schema-generator/dist/src/NodeParser/IndexedAccessTypeNodeParser.js:47:42)
    at ChainNodeParser.createType (file:///src/api/node_modules/ts-json-schema-generator/dist/src/ChainNodeParser.js:27:54)
    at TypeReferenceNodeParser.createSubContext (file:///src/api/node_modules/ts-json-schema-generator/dist/src/NodeParser/TypeReferenceNodeParser.js:60:62)
    at TypeReferenceNodeParser.createType (file:///src/api/node_modules/ts-json-schema-generator/dist/src/NodeParser/TypeReferenceNodeParser.js:30:70)
    at ChainNodeParser.createType (file:///src/api/node_modules/ts-json-schema-generator/dist/src/ChainNodeParser.js:27:54)
    at AnnotatedNodeParser.createType (file:///src/api/node_modules/ts-json-schema-generator/dist/src/NodeParser/AnnotatedNodeParser.js:25:47)
    at file:///src/api/node_modules/ts-json-schema-generator/dist/src/NodeParser/TypeLiteralNodeParser.js:35:117
    at Array.map (<anonymous>) {
  msg: 'Invalid index "exoskeleton" in type "indexed-type-1777104669-59854-59949-1777104669-59841-59950-1777104669-59839-60229-1777104669-59543-60230-1777104669-0-108983<structure-1777104669-16731-16733-1777104669-16717-16746-1777104669-16680-16747-1777104669-0-108983,structure-1777104669-16734-16737-1777104669-16717-16746-1777104669-16680-16747-1777104669-0-108983,structure-1777104669-16738-16741-1777104669-16717-16746-1777104669-16680-16747-1777104669-0-108983,structure-1777104669-16742-16745-1777104669-16717-16746-1777104669-16680-16747-1777104669-0-108983>"'
}

Node.js v20.13.1

And to be honest, I have no clue about how to read and correct this at this point!
Do you guys have any clue on how to fix this ?
Thanks

Closing comment (2024-05-27T20:02:39Z): Probably duplicate of #542