Types 将头盔升级到v4.5.0,并需要与IHelmetContentSecurityPolicyDirectives等效的类型

Types 将头盔升级到v4.5.0,并需要与IHelmetContentSecurityPolicyDirectives等效的类型,types,helmet.js,Types,Helmet.js,只是修改了NodeJS/Typescript应用程序中使用的依赖项,并且遇到了从版本“3.23.2”更改为“4.5.0”的障碍 我已经从package.json文件中删除了依赖项“@types/helmet”:“0.0.47” 编译会导致以下语义错误: src/loaders/security.ts(2,18): error TS2305: Module '"helmet"' has no exported member 'IHelmetContentSecurityPoli

只是修改了NodeJS/Typescript应用程序中使用的依赖项,并且遇到了从版本“3.23.2”更改为“4.5.0”的障碍

我已经从package.json文件中删除了依赖项“@types/helmet”:“0.0.47”

编译会导致以下语义错误:

src/loaders/security.ts(2,18): error TS2305: Module '"helmet"' has no exported member 'IHelmetContentSecurityPolicyDirectives'.
src/options.ts(1,10): error TS2305: Module '"helmet"' has no exported member 'IHelmetContentSecurityPolicyDirectives'.
选项1.ts包括:

import { IHelmetContentSecurityPolicyDirectives } from 'helmet';

export interface Options {
  redirectUrl: string;
  mountPath: string;
  serviceName?: string;
  views?: string | string[];
  csp?: IHelmetContentSecurityPolicyDirectives;
  i18n?: I18nOptions;
}
security.ts的定义如下:

import { Application } from 'express';
import helmet, { IHelmetContentSecurityPolicyDirectives } from 'helmet';
import logger from '../lib/logger';

const configureSecurity = (app: Application, csp: IHelmetContentSecurityPolicyDirectives | undefined): void => {
  logger.info('Configuring Security using Helmet');
  const defaultSrc = (csp && csp.defaultSrc) || [];
  const styleSrc = (csp && csp.styleSrc) || [];
  const scriptSrc = (csp && csp.scriptSrc) || [];
  app.use(helmet({
    contentSecurityPolicy: {
      directives: {
        defaultSrc: [...defaultSrc, "'self'"],
        styleSrc: [...styleSrc, "'self'"],
        scriptSrc: [
          ...scriptSrc,
          "'self'",
          "'sha256-+XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'",
          "'sha256-+XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'",
        ],
      },
    },
  }));
};

export default configureSecurity;

对于csp类型,我不知道应该使用什么来代替IHelmetContentSecurityPolicyDirections。。

这里是头盔的维护者

头盔v3没有正式的类型脚本定义,头盔v4有。简而言之,您会看到这个问题,因为社区为头盔v3创建的类型没有清晰地映射到头盔v4中的官方类型

您正在寻找
IHelmetContentSecurityPolicyDirectives
的替代方案。以下是内容安全策略模块的官方类型定义:

导出接口内容SecurityPolicyOptions{
指令?:记录<
一串
|宜人的
|危险禁用默认类型SRC
>;
reportOnly?:布尔值;
}
ContentSecurityPolicyOptions
指令
键是旧的
IHelmetContentSecurityPolicyDirectives
的“转世”

我看到两种选择:

  • 自己定义类型,然后使用它。例如:

    类型CspDirectiveValue=
    |串
    |((req:IncomingMessage,res:ServerResponse)=>string);
    类型=记录;
    
    然后,您可以使用
    csp指令
    代替旧的
    IHelmetContentSecurityPolicyDirectives
    类型

  • 稍微修改一下代码

    您可以更新
    选项
    界面以获取头盔的所有选项:

    从“头盔”导入头盔;
    导出接口选项{
    // ...
    头盔选项:参数[0];
    // ...
    }
    
    然后,您可以在
    配置安全性
    中使用它:

    const-configureSecurity=(应用程序:应用程序,头盔选项:参数[0]):void=>{
    // ...
    应用程序使用(头盔选项);
    };
    
    您的实际代码可能会有所不同