メインコンテンツに移動
バージョン: 最新 (v5.0.x)

書式タイププロバイダー

独自タイプのプロバイダーを書く方法

カスタムのタイププロバイダーを実装するときの注意事項

Type Contravariance

通常、Type Narrowing チェックは never に依存して到達不能な状態を表しますが、タイププロバイダーインターフェイスの削減は unknown のみを上限として行う必要があります。

その理由は、FastifyInstance の特定のメソッドが TypeProvider に対して反変であり、カスタムのタイププロバイダーインターフェイスが FastifyTypeProviderDefault で置換できない限り、TypeScript が代入可能性の問題を明らかにする場合があるためです。

たとえば、FastifyTypeProviderDefault は次のように代入できません

export interface NotSubstitutableTypeProvider extends FastifyTypeProvider {
// bad, nothing is assignable to `never` (except for itself)
validator: this['schema'] extends /** custom check here**/ ? /** narrowed type here **/ : never;
serializer: this['schema'] extends /** custom check here**/ ? /** narrowed type here **/ : never;
}

次のように変更する場合を除く

export interface SubstitutableTypeProvider extends FastifyTypeProvider {
// good, anything can be assigned to `unknown`
validator: this['schema'] extends /** custom check here**/ ? /** narrowed type here **/ : unknown;
serializer: this['schema'] extends /** custom check here**/ ? /** narrowed type here **/ : unknown;
}