Поскольку response
является объединением ResponseObject | Boom | null
, мы можем получить доступ только к общим членам объединения, если только мы не используем type-guard.
Существует несколько типов охранников типа, и вы можете больше узнать о здесь . Ниже я использую охрану типа 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
typeguard также должен работать:
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
включено, но в любом случае может быть хорошей идеей.