编写类型提供程序
如何编写自己的类型提供程序
在实现自定义类型提供程序时需要注意的事项
类型逆变
虽然详尽的类型缩小检查通常依赖于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;
}