跳到主要內容
版本:最新版 (v5.0.x)

撰寫類型提供者

如何撰寫您自己的類型提供者

實作自訂類型提供者時要記住的事項

類型逆變性

儘管詳盡的類型縮小檢查通常依賴 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;
}