TypeScript中如何通过对象解构赋值为变量指定类型?
解构赋值时为变量指定类型的正确方式
你之前的写法错误是把类型语法和解构重命名搞混了:
const { namespace:string } = req.query;这是变量重命名,意思是把req.query.namespace赋值给名为string的变量,不是指定类型;namespace as string放在解构里不符合语法,类型断言不能这么用。
解决这个问题最简洁规范的方式是先定义对应req.query的类型/接口,再把req.query断言为该类型后解构,这样解构出的变量会自动带上类型:
步骤1:定义查询参数的类型
可以用接口或者类型别名,按需选择:
// 接口写法 interface QueryParams { namespace: string; service: string; version: string; status: string; } // 或者类型别名写法 type QueryParams = { namespace: string; service: string; version: string; status: string; };
如果某个参数是可选的,在属性名后加?即可,比如namespace?: string;。
步骤2:断言类型后解构
const { namespace, service, version, status } = req.query as QueryParams;
这样解构出来的namespace、service等变量就都是string类型了,后续使用时不需要再反复做类型断言。
如果只是临时用一次,也可以直接在解构时内联类型断言(但不如上面的方式优雅):
const { namespace, service, version, status } = req.query as { namespace: string; service: string; version: string; status: string; };
内容的提问来源于stack exchange,提问作者Vedant Agarwala
相关产品推荐
相关产品推荐

