TSで型情報を埋める
unique symbolとか
しかし、ランタイムのデータを扱うときに邪魔
_typesというフィールドを用意しておく。
code:ts
/**
* Base schema type.
*/
export type BaseSchema<TInput = any, TOutput = TInput> = {
async: false;
_parse(input: unknown, info?: ParseInfo): _ParseResult<TOutput>;
_types?: { input: TInput; output: TOutput }; // ここ
};
これをnullableにしておく
取り出す際にNonNullableをかませることで実現してる
nullableなので、ランタイム側は_typesの値を入れなくても怒られない
code:ts
/**
* Input inference type.
*/
export type Input<TSchema extends BaseSchema | BaseSchemaAsync> = NonNullable<
この方法は単純で、間違えにくくて良い
nullableな型を扱うときはやや注意だろうか?いや別にそうでもないか