撰寫類型提供者
如何撰寫您自己的類型提供者
實作自訂類型提供者時要記住的事項
類型逆變性
儘管詳盡的類型縮小檢查通常依賴 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;
}