javascript - 如何从 Typescript 中的 request.body 检查对象类型?
问题描述
我需要从请求正文中检查对象类型,然后基于此类型运行适当的函数,我尝试以这种方式执行此操作:
export interface SomeBodyType {
id: string,
name: string,
[etc....]
}
export const someFunction = async (req: Request, res: Response) => {
const { body } = req.body;
if (body instanceof SomeBodyType) {
//run function A
} else {
// run function B
}
}
但它不起作用,导致我SomeBodyType
返回错误:only refers to a type, but is being used as a value here.
,
那么,body
在这种情况下如何检查类型?
谢谢你的帮助!
//// 编辑:
感谢@phn 的回答,我创建了这个通用函数来检查对象类型:
export const checkObjectType = <T>(body: T): boolean => {
return (body as T) !== undefined;
}
如果这个功能好,请看看并评论
解决方案
如评论中所述,运行时中不存在类型。
您需要编写一个函数来验证正文中接收到的内容,一种方法来自TypeScript 文档(参见代码示例)。
更高级和动态的方法是使用验证库来根据模式或合同验证您的输入,例如ajv
interface SomeBodyType {
id: string,
name: string
}
function isBodyType(body: any): body is SomeBodyType {
return (body as SomeBodyType).id !== undefined &&
(body as SomeBodyType).name !== undefined;
}
export const someFunction = (req: Request, res: Response) => {
const { body } = { body: { id: '', name: '' } };
if (isBodyType(body)) {
// run function A
} else {
// run function B
}
};
推荐阅读
- python - 在 python 中模拟一个常量
- docker - 在 docker 上部署时如何更改 Tomcat 中的基本 URL
- docker - 部署失败'
Dockerfile:Dockerfile' - python-3.x - Django 静态 style.css 样式
- excel - 如何在UiPath RPA中匹配系统数据表和excel之间的同一列
- arrays - json对象到带有if else的列
- filter - 在 LDAP 过滤器中添加以 ABC 开头的用户到系统
- bash - echo 行没有正确重定向到 bash 脚本?
- google-sheets - 计算值而不必指定每个值
- quantlib - Quantlib:可赎回和可回售期权的债券