目标缺少构造签名的“新”表达式隐式具有“任意”类型

问题描述

我试图放入此脚本以提高系统的安全性,但打字稿出现错误,在这种情况下,我尝试将其放入app.ts

obs:此代码是尝试将nodejs中的脚本转换为打字稿

脚本

import express from 'express';
import helmet from 'helmet';
import redis from 'redis';
import RateLimit from 'express-rate-limit';
import RateLimitRedis from 'rate-limit-redis';
import { resolve } from 'path';
import routes from './routes';

import ErrorHandler from './app/middlewares/errorHandler';

 class App {
  public server = express();

  constructor() {
    this.middlewares();
    this.routes();
    this.errorHandlers();
  }

  middlewares() {
    this.server.use(express.json());
    this.server.use(helmet());

    if (process.env.NODE_ENV === 'production') {
      this.server.use(
        new RateLimit({
          store: new RateLimitRedis({
            client: redis.createClient({
              host: process.env.REDIS_HOST,port: process.env.REDIS_PORT,}),windowMs: 1000 * 60 * 15,max: 100,);
    }
  }

错误区域

new RateLimit({
      store: new RateLimitRedis({
        client: redis.createClient({
          host: process.env.REDIS_HOST,

错误消息

“新”表达式的目标缺少构造签名,它隐式地具有“任意”类型。

解决方法

您应该为这些软件包添加类型描述:

npm i @types/express-rate-limit --save-dev
npm i @types/rate-limit-redis --save-dev

这也适用于所有其他安装软件包。如果您的程序包没有相应的类型定义程序包,那么您应该自己创建它。

,

我相信如果你改变了

new RateLimit({
    //...
})

new (RateLimit as any)({
      //...
}),

将解决问题。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...