React 项目中如何使用 TypeScript?有哪些最佳实践?
一、是什么
TypeScript 是 JavaScript 的超集,为 React 开发提供了静态类型检查、更好的 IDE 支持和更强的重构信心。在 React 项目中使用 TypeScript,可以在编译期捕获 props 传递错误、state 类型不匹配、事件处理类型问题等常见 bug,显著提升代码质量和开发体验。
React 本身使用 TypeScript 编写了完整的类型定义(@types/react),对 TypeScript 有一流的支持。
二、组件类型定义
函数组件的两种写法
为什么不推荐 React.FC:
- 早期版本隐式包含
children类型,React 18 已移除但造成过混淆 - 不支持泛型组件
- 对默认 props 的类型推断不理想
- 函数声明方式更直接,类型推断更清晰
interface vs type
一般建议:组件 props 用 interface,其他类型定义视场景选择。保持项目内一致即可。
三、Hooks 类型标注
useState
useRef
useRef<T>(null) 返回 RefObject<T>(.current 只读),useRef<T>(initialValue) 返回 MutableRefObject<T>(.current 可写)。
useReducer
使用判别联合类型(Discriminated Union)定义 action,TypeScript 可以在 switch-case 中自动收窄 payload 的类型。
四、事件类型
React 事件都有对应的泛型类型,需要指定目标元素类型:
常用事件类型速查:
五、Context 类型
将 Context 默认值设为 null 并在自定义 hook 中进行空值检查,比提供一个假的默认值更安全。
六、泛型组件
泛型组件也可以结合判别联合 Props,按 type 字段区分不同 props 形态,TypeScript 会自动收窄每个分支的类型。