You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 19:15:17