TS7 发布后,React 生态立刻就能用。但 Vue、Angular 等生态还需要等待。
为什么?
JSX/TSX 是 TypeScript 的原生语法扩展
// 这就是标准 TypeScript,不需要额外工具
function App() {
const [count, setCount] = useState(0)
return <div>{count}</div>
}
TypeScript 编译器直接理解 JSX 的类型:
@types/react定义了 JSX 的类型声明- 泛型、条件类型在 JSX 中直接可用
- 不需要额外的解析器
React 的组合模型天然适合 TypeScript
React 的核心模型是:
Component
↓
接受 Props
↓
返回 JSX
↓
组合其他 Component
TypeScript 的能力天然适合描述这个模型:
Structural Typing:Props 只需要结构匹配,不需要名义身份
interface ButtonProps {
variant: 'primary' | 'secondary'
children: React.ReactNode
}
// 只要传入的对象有 variant 和 children,就匹配
<Button variant="primary">Click</Button>
Generics:让组件适应任意类型
function Select<T extends string>({ options, value, onChange }: SelectProps<T>) {
// T 由调用者决定,类型从输入贯穿到输出
}
Union Types:描述互斥状态
type ModalProps = { open: true; onClose: () => void } | { open: false }
Conditional Types:根据输入决定输出类型
type PropsOf<C> = C extends React.ComponentType<infer P> ? P : never
核心洞察
React 的组合式组件 + Props + Children 模型,和 TypeScript 的 Structural Typing + Generics + Unions 是天然契合的。
Component
↓
Props(结构化类型)
↓
Composition(结构匹配)
这不是巧合。React 用 JavaScript 对象描述 UI,TypeScript 用类型描述 JavaScript 对象的结构。两者在"描述"这个层面上是统一的。