如何在解构赋值重命名变量时为其指定类型?
在TypeScript中解构赋值重命名同时添加类型的正确方式
完全可以实现这种需求!你之前尝试的<string>或as string没生效,是因为解构场景下的类型标注位置和普通变量不一样——解构里的冒号是用来重命名的,不是类型标注的语法位置。下面给你几种靠谱的实现方式:
方式一:给解构的源对象断言类型(推荐)
最规范的做法是先定义好对应的数据类型,再把解构的源对象断言成这个类型,这样解构出来的变量会自动继承类型:
// 先定义接口描述数据结构 interface TaskInfo { Script: string; EstimatedDuration: number; ActualDuration: number; } // 断言源对象类型后解构 const { Script: script, EstimatedDuration: estimated_duration, ActualDuration: actual_duration, } = response.data[0] as TaskInfo;
如果不想单独定义接口,也可以用内联类型:
const { Script: script, EstimatedDuration: estimated_duration, ActualDuration: actual_duration, } = response.data[0] as { Script: string; EstimatedDuration: number; ActualDuration: number; };
方式二:给解构整体添加类型标注
你也可以直接在解构语句的末尾添加类型标注,告诉TypeScript整个解构对象的结构:
const { Script: script, EstimatedDuration: estimated_duration, ActualDuration: actual_duration, }: { Script: string; EstimatedDuration: number; ActualDuration: number; } = response.data[0];
方式三:单独给每个解构变量加类型断言(不推荐)
如果非要给单个变量单独标注,也可以用类型断言,但这种方式更冗余,而且无法约束源对象的结构,只适合临时场景:
const { Script: script = '' as string, EstimatedDuration: estimated_duration = 0 as number, ActualDuration: actual_duration = 0 as number, } = response.data[0];
为什么你之前的尝试没生效?
你之前在变量后加<string>或as string,比如Script: script<string>,这不符合TypeScript的语法——解构里的冒号是重命名逻辑,TypeScript会把后面的内容当成变量名,而不是类型标注。必须通过上面几种方式,明确告诉TypeScript整个解构对象的类型,才能让变量获得正确的类型检查。
内容的提问来源于stack exchange,提问作者jhpratt
相关产品推荐
相关产品推荐

