Skip to content

Latest commit

 

History

History
46 lines (32 loc) · 1.3 KB

applying-from-schema-on-generics.md

File metadata and controls

46 lines (32 loc) · 1.3 KB

How can I apply FromSchema on generics?

Let's say that your are building a library on top of JSON Schemas, for instance a function that builds mocked data from schemas. You might want to benefit from inferred typings thanks to json-schema-to-ts:

import type { FromSchema, JSONSchema } from "json-schema-to-ts";

type Mocker = <SCHEMA extends JSONSchema>(schema: SCHEMA) => FromSchema<SCHEMA>;

const getMockedData: Mocker = schema => {
  ... // logic here
};

const dogSchema = {
  type: "object",
  ... // schema here
} as const;

const dogMock = getMockedData(dogSchema);

Sadly, for some reasons that I don't fully grasp, TypeScript will raise an type instantiation is excessively deep and possibly infinite error:

type instantiation is excessively deep and possibly infinite error

You can still make it work by adding a second generic with the corresponding default:

import { FromSchema, JSONSchema } from "json-schema-to-ts";

type Mocker = <SCHEMA extends JSONSchema, DATA = FromSchema<SCHEMA>>(
  schema: SCHEMA,
) => DATA;

const getMockedData: Mocker = schema => {
  ... // logic here
};

const dogSchema = {
  type: "object",
  ... // schema here
} as const;

// 🙌 Will work!
const dogMock = getMockedData(dogSchema);