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

如何配置Prettier阻止空数组作为参数时强制换行

Prettier配置实现函数尾参数与前序参数闭合括号同行

问题表现

目标格式化效果:

const ids = models.reduce(
    (prev: number[], curr: Model) => {
        if (this.value === curr.value) prev.push(curr.id);
        return prev;
    }, [] // 空数组与前一个箭头函数的闭合花括号同行
);

Prettier默认格式化效果(空数组被强制折到新行):

const ids = models.reduce(
    (prev: number[], curr: Model) => {
        if (this.value === curr.value) prev.push(curr.id);
        return prev;
    },
    []
);

解决方法

适用于Prettier 3.1及以上版本

在项目的.prettierrc配置文件中添加如下配置:

{
  "experimentalLayout": "allAtOnce"
}

旧版本Prettier对函数参数的折行逻辑是硬编码的:只要参数列表中存在任意一个跨多行的参数,就会强制所有参数单独占一行。allAtOnce是3.1版本新增的实验性布局模式,替换了这套旧折行逻辑,开启后只要行剩余长度足够,短参数会自动保留在上一个参数的收尾行,不会被强制折到新行。
配置完成后重启编辑器,重新格式化即可达到目标效果,默认printWidth(80字符)完全足够容纳, []的长度,不需要额外调整行宽。

适用于Prettier 2.x版本

2.x系列版本没有提供对应配置项修改上述硬编码折行规则,只能通过忽略注释对指定代码段跳过格式化:

// prettier-ignore
const ids = models.reduce(
    (prev: number[], curr: Model) => {
        if (this.value === curr.value) prev.push(curr.id);
        return prev;
    }, []
);

// prettier-ignore注释会让Prettier跳过紧接其后的第一个代码节点的格式化,放在const声明上方即可保留手写的格式。

内容的提问来源于stack exchange,提问作者Starfish

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 18:51:19