推荐用正则^s*types+([a-za-z0-9_]+)s*=s*(.+?);匹配typescript类型别名等号两侧空格,捕获类型名和右侧表达式,替换为type $1 = $2;,支持泛型且非贪婪匹配至分号。

匹配 TypeScript 类型别名中的等号两边空格
Sublime 的正则替换常被用来清理 type 声明里的冗余空格,比如把 type Foo = string; 里 = 前后不一致的空格统一成「= 前 1 空格、后 1 空格」。直接搜 = 容易误伤字符串或注释里的等号,得限定在类型声明行内。
推荐用这个正则模式做查找:
^\s*type\s+([a-zA-Z0-9_]+)\s*=\s*(.+?);它能捕获类型名和右侧类型表达式,同时忽略行首缩进和中间任意空格。替换为:
type $1 = $2;注意:如果类型右侧含泛型(如
Array<string></string>)或嵌套括号,这个简单模式仍安全——因为 .+? 是非贪婪匹配,且分号是明确终止符。
- 别用
.*替代.+?,否则可能跨行吞掉后续语句 - 确保 Sublime 的「Match case」关闭、「Regex」开启、「Whole line」不用勾选
- 若文件含
declare type,需把查找正则开头改成^\s*(?:declare\s+)?type
把 interface 属性冒号对齐变成单空格格式
团队代码规范常要求接口属性写成 name: string; 而非 name : string; 或 name: string;。但直接搜 : 会匹配函数参数、对象字面量甚至三元运算符,必须加上下文约束。
用这个查找正则:
^\s*(?:(?:export\s+)?interface\s+[a-zA-Z0-9_]+|\})\s*$\n(?:[^{\n]*?\n)*?^\s*([a-zA-Z0-9_]+)\s*:([^;{\n]+);太重了,实际没必要。更稳的做法是分两步:先人工定位到 interface 块内部(用 Ctrl+Shift+P → Go to Symbol),再执行局部替换:
查找:
^\s*([a-zA-Z0-9_]+)\s*:\s*([^;{\n]+);
替换:
$1: $2;
- 务必开启「In selection」,只对选中的 interface body 生效
- 如果属性含可选修饰符(
name?: string),查找正则要改成^\s*([a-zA-Z0-9_]+\??)\s*:\s*([^;{\n]+); - 冒号后多个空格会被压缩成一个,但冒号前零个空格(
name:string)不会自动补空格——这是设计使然,避免误改合法紧凑写法
批量删除类型定义末尾的分号,但保留函数类型中的分号
TypeScript 允许类型别名和接口末尾省略分号,但函数类型签名(如 type Fn = (x: number) => void;)里的分号属于语句结束,不能动。直接搜 ; + 行尾 $ 会误删所有分号。
安全做法是只处理「以 type 或 interface 开头、且本行不含 => 或 ( 的行」:
查找:
^(\s*(?:type|interface)\s+[a-zA-Z0-9_]+(?:\s+extends\s+[a-zA-Z0-9_\s,]+)?)\s*;\s*$
替换:
$1
- 这个正则会放过
type A = (x: number) => void;,因为含=>;也会放过interface I { x: number; },因为末尾不是;而是} - 如果 interface 含 extends(如
interface A extends B, C),正则里的(?:\s+extends\s+[a-zA-Z0-9_\s,]+)?能覆盖,但不支持多行 extends 列表 - 执行前建议先
Ctrl+F预览匹配项,确认没圈中函数类型行
处理泛型参数中的空格和换行(如 )
泛型参数列表常因格式化工具或手写习惯变得混乱:<t></t>、、甚至跨行。Sublime 正则无法解析语法树,但可以基于常见模式做保守规整。
查找:
替换:再配合一次替换:
,\s+→
,和
\s*=\s*→
=
- 第一个正则只匹配尖括号包裹的纯泛型参数(不含
keyof、infer等关键字),所以<k extends keyof t></k>不会被误处理 - 不要试图用单次正则搞定所有空格——分步替换更可控,也方便撤销某一步
- 如果泛型含箭头函数(如
<t> => T</t>),尖括号不属于泛型而是 JSX/类型断言,此方案不适用,得人工跳过
真正麻烦的是嵌套泛型(Map<string array>></string>)——Sublime 正则没有递归能力,这种只能靠 ESLint 的 @typescript-eslint/type-annotation-spacing 规则来长期约束,正则仅适合扁平结构。











