Types 将头盔升级到v4.5.0,并需要与IHelmetContentSecurityPolicyDirectives等效的类型
只是修改了NodeJS/Typescript应用程序中使用的依赖项,并且遇到了从版本“3.23.2”更改为“4.5.0”的障碍 我已经从package.json文件中删除了依赖项“@types/helmet”:“0.0.47” 编译会导致以下语义错误: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
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=>{
// ...
应用程序使用(头盔选项);
};
您的实际代码可能会有所不同