Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Used in the nestjs (typescript) framework, the ts compiler tells you that the types do not match #10600

Closed
3 of 15 tasks
ufec opened this issue Nov 25, 2022 · 7 comments
Closed
3 of 15 tasks
Labels
needs triage This issue has not been looked into

Comments

@ufec
Copy link
Contributor

ufec commented Nov 25, 2022

Is there an existing issue for this?

  • I have searched the existing issues

Current behavior

Used in the nestjs (typescript) framework, the ts compiler tells you that the types do not match
image
as shown in the picture
I have to use type assertion like this

type FastifyAdapterParameters = Parameters<typeof adapter.register>;
type FastifyAdapterRegister = FastifyAdapterParameters[0];
const Helmet = fastifyHelmet as unknown as FastifyAdapterRegister;
await app.register(Helmet); // or await adapter.register(Helmet);

If I don't do this, I will get a type validation error

Argument of type 'FastifyHelmet' is not assignable to parameter of type 'FastifyPluginCallback<FastifyHelmetOptions, RawServerDefault, FastifyTypeProviderDefault> | FastifyPluginAsync<...> | Promise<...> | Promise<...>'.
Type 'FastifyHelmet' is not assignable to type 'FastifyPluginCallback<FastifyHelmetOptions, RawServerDefault, FastifyTypeProviderDefault>'.

Minimum reproduction code

https://stackblitz.com/edit/nestjs-typescript-starter-yffp2u?file=src/main.ts

Steps to reproduce

npm i -g @nestjs/cli
nest new test_helmet
cd test_helmet
npm uninstall @nestjs/platform-express && npm install --save @nestjs/platform-fastify fastify @fastify/helmet

modify src/main.ts to

import { NestFactory } from '@nestjs/core';
import {
  FastifyAdapter,
  NestFastifyApplication,
} from '@nestjs/platform-fastify';
import fastifyHelmet from '@fastify/helmet';
import { AppModule } from './app.module';

async function bootstrap() {
  const adapter = new FastifyAdapter();
  const app = await NestFactory.create<NestFastifyApplication>(
    AppModule,
    adapter,
  );
  app.register(fastifyHelmet);
  await app.listen(3000);
}
bootstrap();

you will get a type error

image

Expected behavior

like this app.register(fastifyHelmet); and no type error

Package

  • I don't know. Or some 3rd-party package
  • @nestjs/common
  • @nestjs/core
  • @nestjs/microservices
  • @nestjs/platform-express
  • @nestjs/platform-fastify
  • @nestjs/platform-socket.io
  • @nestjs/platform-ws
  • @nestjs/testing
  • @nestjs/websockets
  • Other (see below)

Other package

fastify

NestJS version

No response

Packages versions

{
  "name": "nest-typescript-starter",
  "private": true,
  "version": "1.0.0",
  "description": "Nest TypeScript starter repository",
  "license": "MIT",
  "scripts": {
    "build": "nest build",
    "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
    "start": "nest start",
    "start:dev": "nest start --watch",
    "start:debug": "nest start --debug --watch",
    "start:prod": "node dist/main",
    "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
    "test": "jest",
    "test:watch": "jest --watch",
    "test:cov": "jest --coverage",
    "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
    "test:e2e": "jest --config ./test/jest-e2e.json"
  },
  "dependencies": {
    "@fastify/helmet": "^10.1.0",
    "@nestjs/common": "^9.0.0",
    "@nestjs/core": "^9.0.0",
    "@nestjs/platform-fastify": "^9.2.0",
    "fastify": "^4.10.2",
    "reflect-metadata": "^0.1.13",
    "rxjs": "^7.5.5"
  },
  "devDependencies": {
    "@nestjs/cli": "^9.0.0",
    "@nestjs/schematics": "^9.0.0",
    "@nestjs/testing": "^9.0.0",
    "@types/express": "^4.17.13",
    "@types/jest": "^28.1.4",
    "@types/node": "^18.0.3",
    "@types/supertest": "^2.0.12",
    "@typescript-eslint/eslint-plugin": "^5.30.5",
    "@typescript-eslint/parser": "^5.30.5",
    "eslint": "^8.19.0",
    "eslint-config-prettier": "^8.5.0",
    "eslint-plugin-prettier": "^4.2.1",
    "jest": "^28.1.2",
    "prettier": "^2.7.1",
    "source-map-support": "^0.5.21",
    "supertest": "^6.2.4",
    "ts-jest": "^28.0.5",
    "ts-loader": "^9.3.1",
    "ts-node": "^10.8.2",
    "tsconfig-paths": "^4.0.0",
    "typescript": "^4.7.4"
  },
  "jest": {
    "moduleFileExtensions": [
      "js",
      "json",
      "ts"
    ],
    "rootDir": "src",
    "testRegex": ".*\\.spec\\.ts$",
    "transform": {
      "^.+\\.(t|j)s$": "ts-jest"
    },
    "collectCoverageFrom": [
      "**/*.(t|j)s"
    ],
    "coverageDirectory": "../coverage",
    "testEnvironment": "node"
  }
}

Node.js version

16.17.0

In which operating systems have you tested?

  • macOS
  • Windows
  • Linux

Other

I tried looking for a solution in the fastify-helmet repository, but I realized that I seemed to be looking in the wrong place, because the default fastify works fine
Later I forked the nestjs project and manually changed the fastify version locally. After building, I got the expected results in 10-fastify. Should I submit a PR?

@ufec ufec added the needs triage This issue has not been looked into label Nov 25, 2022
@ufec
Copy link
Contributor Author

ufec commented Nov 26, 2022

I also had the same problem with @fastify/compress

@micalevisk
Copy link
Member

I guess upgrading fastify would fix that. #10583

@ufec
Copy link
Contributor Author

ufec commented Nov 26, 2022

I guess upgrading fastify would fix that. #10583

in my given minimum reproduction code

I use latest fastify, but this is due to
packages/platform-fastify/package.json The version of fastify that this file depends on is too low. I tried to submit a PR #10601 but it was closed

@micalevisk
Copy link
Member

but it was closed

#10601 (comment)

@ufec
Copy link
Contributor Author

ufec commented Nov 26, 2022

but it was closed

#10601 (comment)

When can it be applied

@micalevisk
Copy link
Member

when Kamil is available to review and approve it.

@ufec
Copy link
Contributor Author

ufec commented Nov 26, 2022

when Kamil is available to review and approve it.

OK

@ufec ufec closed this as completed Nov 26, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
needs triage This issue has not been looked into
Projects
None yet
Development

No branches or pull requests

2 participants