fastify-type-provider-typebox
fastify-type-provider-typebox copied to clipboard
Type error: TypeBoxTypeProvider does not satisfy the constraint FastifyTypeProvider
Prerequisites
- [X] I have written a descriptive issue title
- [X] I have searched existing issues to ensure the bug has not already been reported
Fastify version
4.24.3
Plugin version
3.5.0
Node.js version
18.15.0
Operating system
macOS
Operating system version (i.e. 20.04, 11.3, 10)
Ventura 13.5.1
Description
TypeBoxTypeProvider produces a type error in version 3.5.0. I am not facing this issue in version 3.1.0.
Steps to Reproduce
import Fastify from 'fastify'
import { TypeBoxTypeProvider } from '@fastify/type-provider-typebox'
const fastify = Fastify().withTypeProvider<TypeBoxTypeProvider>()
This produces a type error:
error TS2344: Type 'TypeBoxTypeProvider' does not satisfy the constraint 'FastifyTypeProvider'.
Property 'input' is missing in type 'TypeBoxTypeProvider' but required in type 'FastifyTypeProvider'.
Typescript version: 5.0.4
Expected Behavior
No response
I cannot reproduce. Can you push your file and tsconfig to a repo?
@mcollina this happens when using pnpm, and probably recent versions of yarn (I haven't tried them but I've heard they're more restrictive than npm). You don't explicitly declare fastify as a dependency or peerDependency, but still import it in index.d.ts, which makes it a phantom dependency. It's all fine if the consumer is using npm, because npm allows phantom dependencies. But if they use pnpm, when you try to import FastifyTypeProvider from fastify, you get an unknown type because fastify is not declared as a dependency and thus not accessible from your modules:
Workaround:
Adding this to my package.json fixed the issue for me:
"pnpm": {
"packageExtensions": {
"@fastify/type-provider-typebox@^3.6.0": {
"peerDependencies": {
"fastify": "^4.16.0"
}
}
}
}
Needless to say, I think it should be permanently fixed by adding the peerDependency to your package.