跳至主要内容
版本:最新版本 (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;
}