fastify-type-provider-typebox icon indicating copy to clipboard operation
fastify-type-provider-typebox copied to clipboard

Type error: TypeBoxTypeProvider does not satisfy the constraint FastifyTypeProvider

Open myftija opened this issue 2 years ago • 8 comments

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

myftija avatar Oct 23 '23 12:10 myftija

I cannot reproduce. Can you push your file and tsconfig to a repo?

mcollina avatar Oct 28 '23 08:10 mcollina

@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: image image

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.

paulius-valiunas avatar Aug 13 '24 14:08 paulius-valiunas