quicktype icon indicating copy to clipboard operation
quicktype copied to clipboard

Typescript -> JSON Schema Output contains "type": "{string}" instead of "type": "string"

Open vamsiampolu opened this issue 6 months ago • 0 comments

I am trying to convert a type that looks like:

import type {Person} from '@myorg/common-types"

export type MemberInfo = Required<Person>;

where person is defined in a common library:

export type Person = { /** * * @type {string} * @memberOf {Person} */ name: string; }


The output type looks something like:

```json
{
  "type": "object",
   "properties": {
      "name": "{string}"
   }
}

I used the following in an npm script:

{
  "scripts": {
     "generate:schema":"quicktype --src ./types/post/memberInfoTypes.ts --src-lang typescript --lang schema --out ./schemas/post/memberInfoSchema.json"    
  }
}

Issue Type

Quicktype Output (JSON Schema from Typescript)

Context (Environment, Version, Language)

Nodejs Version: v20.19.0 Package Manager: pnpm 10.6.2 OS: MacOS 15.4

Input Format: Typescript Output Language: JSON Schema

CLI Version: 23.0.171

Description

I would like to take existing typescript types and convert them to json schema for validation using something like ajv.

Input Data

export type MemberInfo = Required<Person>;

where person is defined in a common library:

export type Person = {
  /**
     *
     * @type {string}
     * @memberOf {Person}
   */
  name: string;
}

Expected Behaviour / Output

The type string is valid JSON Schema while the type "{string}" is not.

{
  "type": "object",
   "properties": {
      "name": "string"
   }
}

Current Behaviour / Output

{
  "type": "object",
   "properties": {
      "name": "{string}"
   }
}

My wild guess is that it may be reading the JSDoc annotations and using them to infer types instead of relying on the typescript definition.

Steps to Reproduce

Clone the repo: https://github.com/vamsiampolu/quicktype-ts-to-json-schema-issue

  1. Run nvm use to set the Node version
  2. Run pnpm install to install the dependencies.
  3. Run the script pnpm generate:schema from the repository

Possible Solution

vamsiampolu avatar Apr 08 '25 01:04 vamsiampolu