同一个尖括号 · 两套语法解释
先告诉 parser:这里能不能写 JSX。
在 .ts 中,尖括号可能属于类型语法;在 .tsx 中,相同 token 可能开启 JSX。自动模式只会根据常见 JSX 特征给出文件类型提示,遇到泛型或旧式尖括号断言等歧义时,应明确选择 TypeScript 或 TSX。
.ts · TypeScript
const value = <User>input
旧式尖括号类型断言在 TypeScript 中合法。
.tsx · TypeScript + JSX
const view = <UserCard />
尖括号用于 JSX;类型断言应改写为 input as User。
TypeScript / TSX 语法样本
格式化器必须先理解需要保留的语法。
仅类型导入
import type { User } from './types'satisfies
const theme = raw satisfies Theme泛型约束
function pick<T extends Entity>(value: T)映射类型
type Flags<T> = { [K in keyof T]?: boolean }条件类型
type Id<T> = T extends Entity ? string : neverTSX props
const Card = (props: CardProps) => <article />格式化处理链
先完成 parse,再按同一程序结构重新打印。
源码
token、注释、类型和 JSX 以文本形式进入 Worker。
TypeScript parser
所选的 .ts / .tsx 文件语境决定如何解释歧义 token。
Prettier printer
根据缩进和 print width 重新选择换行与空格。
格式化结果
类型和注释仍是源码;没有任何代码被执行。
四条能力边界
能成功格式化,不代表能通过构建。
类型检查
这些类型在项目上下文里真的能组合吗?
Next: tsc --noEmitLint
代码是否符合语义规则和仓库规范?
Next: ESLint转译
目标浏览器或运行时最终需要什么 JavaScript?
Next: tsc / bundler执行
程序在运行时会产生什么行为?
Next: 测试 / runtime回到仓库配置
一次性的在线整理,最终应与代码库保持一致。
浏览器
明确选择 TS 或 TSX;只有语法不含歧义时再使用自动模式。
编辑器
使用仓库版本的 Prettier 配置和 format-on-save。
提交
审阅格式化 diff,确认没有混入手工语义修改。
CI
让 prettier --check 与 lint、type-check 各自承担独立门禁。