json schema

比較対象

typescript-json-schema

こちらを使いだしで利用していた。ところが mapped type を使用すると definitions が爆発したりで自分で書いた型を修正する必要性が出てきた。

ts-json-schema-generator

次にこちらを選んだ。

Error: No root type "xxxxx" found

このエラーが続いてなんでやと問答し、解決策を発見した。

export type {

	xxx,

	yyy,

	zzz,

}
export type xxx = ...

export type yyy = ...

export type zzz = ...

このようにバラバラに export してやる必要がある。

ver 2.3 の時点で cjs でビルドされているので対象ソースが esm の場合は別途 tsconfig を読み込む必要がある。対象ソースが vite 環境で vite の機能である下記を使うと generator で処理できないため別ファイルに切り出す必要が出てくる。(静的アセットの取り扱い)

import file from '../filename?xxx'

ネストされた json schema でもid を利用した schema のバリデーションを実行することができるので url の path の設計もきちんとしておく必要がある。

export type test = {



	/**

	 * @id /api/test

	 */

	read :{

		title :string,

		description :string,

	}

}

2024-10-01 追記。複雑でもない型宣言をコンパイルしても部分的に何も吐き出さない場合が多々あり仕様を追うのもあほらしいので使うのをやめています。