gpt4 book ai didi

node.js - 如何修复 TypeScript 错误属性 'isBoom' 在类型 'Boom | ResponseObject' 上不存在

转载 作者:搜寻专家 更新时间:2023-10-30 21:34:15 25 4
gpt4 key购买 nike

以下源代码返回 TypeScript 错误:

this.hapi.ext({
type: 'onPreResponse',
method: async (request, handler) => {
if (request.response.isBoom && request.response.message !== 'Invalid request payload input') {
if (request.response.isServer) {
logger.captureException(request.response, null, {
digest: this.requestDigest(request)
});
} else {
logger.captureMessage(request.response.message, 'info', null, {
digest: this.requestDigest(request)
});
}
}
return handler.continue;
}
});

enter image description here

Property 'isBoom' does not exist on type 'Boom | ResponseObject'. Property 'isBoom' does not exist on type 'ResponseObject'.

Property 'isServer' does not exist on type 'Boom | ResponseObject'. Property 'isServer' does not exist on type 'ResponseObject'.

Argument of type 'string | ((httpMessage: string) => ResponseObject)' is not assignable to parameter of type 'string'. Type '(httpMessage: string) => ResponseObject' is not assignable to type 'string'.

我该如何修复它们? @types/hapi 有问题吗?

最佳答案

因为 response 是一个联合 ResponseObject |繁荣 | null 除非使用类型保护,否则我们只能访问联合的普通成员。

有几种类型的类型保护,你可以阅读更多关于 here 的内容。 .下面我使用一个in类型的守卫来根据属性的存在来区分

import { Server } from 'hapi';

const hapi = new Server({})

hapi.ext({
type: 'onPreResponse',
method: async (request, handler) => {
if (request.response && 'isBoom' in request.response && request.response.message !== 'Invalid request payload input') {
if (request.response.isServer) {
request.response.message // string
}
return handler.continue;
}
}
});

因为 Boom 类型是一个类,instanceof 类型保护也应该起作用:

hapi.ext({
type: 'onPreResponse',
method: async (request, handler) => {
if (request.response && request.response instanceof Boom && request.response.message !== 'Invalid request payload input') {
if (request.response.isServer) {
request.response.message // string
}
return handler.continue;
}
}
});

注意 在这两种情况下,我都添加了对 request.response 的检查以从联合中排除 null。仅当启用 strictNullChecks 时编译器才需要这样做,但无论如何这可能是个好主意。

关于node.js - 如何修复 TypeScript 错误属性 'isBoom' 在类型 'Boom<any> | ResponseObject' 上不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54184444/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com