我使用的是fasttify包,其中类型定义取决于您为其设置的配置选项(例如,您是否创建http或http2服务器)。我希望在fasttify调用的文件中保留这些动态类型(例如,注册路由的文件)。
// loader.ts
import fastify from 'fastify';
import registerApiRoutes from './registerApiRoutes';
export default function loader() {
return fastify({
http2: true,
})
.register(registerApiRoutes)
.listen();
}
// registerApiRoutes
export default function registerApiRoutes(fastify) {
fastify
.get(...);
.post(...);
}
我怎样才能做到这一点呢?参数registerapirroutes .ts"是否有正确的类型取决于我在"loader.ts"中选择的设置?
使用条件类型
的例子:
interface FastifyConfiguration {
http2: boolean
}
interface Fastify {
get(): void
post(): void
}
interface Http2Fastify extends Fastify {
http2Only(): void
}
interface Http1Fastify extends Fastify {
http1Only(): void
}
declare function fastify<C extends FastifyConfiguration>(conf: C): C['http2'] extends true ? Http2Fastify : Http1Fastify