TypeScript中参数类型声明与解构合并的简写语法是否有提案?
能否将函数参数的类型声明与解构操作合并?
首先明确:目前TypeScript不支持你期望的这种直接在解构语法里合并类型声明的简写方式,而且你给出的示例写法本身存在语法逻辑问题——在对象解构中,{ name: string }的含义是把传入对象的string属性重命名为name,并非给name标注类型,这会导致代码报错,因为你调用时传入的对象并没有string这个属性。
不过有几种更简洁的替代方案可以解决你觉得代码冗余的问题:
方案1:用接口/类型别名(最推荐)
如果这个参数类型会被多次使用,定义一个接口或类型别名既能简化代码,又能提升可读性:
interface GreetParams { name: string; age: number; likesCoffee: boolean; } const greet = ({ name, age, likesCoffee }: GreetParams) => `Hi, ${name}! It seems you ${likesCoffee ? 'like' : 'do not like'} coffee and are ${age} years old.`; greet({ name: 'Joe', age: 37, likesCoffee: true });
就算只给单个函数用,内联类型别名也能让代码更清爽:
type GreetParams = { name: string; age: number; likesCoffee: boolean }; const greet = ({ name, age, likesCoffee }: GreetParams) => /* 函数内容 */;
方案2:解构时单独标注类型(冗余,不推荐)
虽然可以给每个解构变量单独加类型注解,但这种写法和你原本的代码一样冗余,只适合临时场景:
const greet = ({ name, age, likesCoffee }: { name: string; age: number; likesCoffee: boolean }) => /* 函数内容 */;
关于语法提案
目前TypeScript官方没有正在推进的类似简写语法的正式提案,社区里曾有过相关讨论,但还没进入正式的提案流程。所以现阶段要简化这类代码,用接口/类型别名是最优解。
内容的提问来源于stack exchange,提问作者Josef Wittmann
相关产品推荐
相关产品推荐

