前端开发
用 TypeScript 编写 React…
在 React + TypeScript 项目中编写带类型的组件、自定义 Hook、事件处理、ref、泛型组件和 Context 时,按优先级套用 33 条类型规则避免类型错误。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 49/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
用 TypeScript 编写 Reac通用
解决思路
- 按优先级顺序处理类型问题:组件类型(CRITICAL)→ Hook 类型(CRITICAL)→ 事件处理(HIGH)→ Ref 类型(HIGH)→ 泛型组件(MEDIUM)→ Context 与状态(MEDIUM)→ 工具类型(LOW)。
- 组件 props 用 interface 定义,联合类型用 type 定义(comp-props-interface)。
- children 类型按需使用 ReactNode 或 ReactElement,不要用 any(comp-children-types)。
- 默认 props 使用解构默认值写法,而非 defaultProps(comp-default-props)。
- forwardRef 组件要显式标注 ref 与 props 的类型(comp-forward-ref)。
- 多态 "as" prop 组件要正确标注多态类型(comp-polymorphic)。
- 优先使用函数声明而非 React.FC,避免隐式 children 与类型限制(comp-fc-vs-function)。
- 为组件设置 displayName 便于调试(comp-display-name)。
- 展开 rest props 时使用正确的类型(如 ComponentPropsWithoutRef)而非 any(comp-rest-props)。
- useState 显式传入泛型类型,联合类型场景避免推断为宽泛类型(hook-usestate)。
- useRef 区分 DOM 元素引用与可变值引用,DOM 用具体 HTML 元素类型,可变值用 useRef<T>(initial)(hook-useref)。
- useReducer 的 action 使用可辨识联合(discriminated union)类型(hook-use-reducer)。
- useCallback 的参数与返回值要显式标注类型(hook-use-callback)。
- useMemo 标注返回类型,避免推断出错误类型(hook-use-memo)。
- useContext 配合 null 检查,封装自定义 hook 在 context 为 null 时抛错(hook-use-context)。
- 自定义 Hook 显式声明返回类型,通常返回 as const 元组或对象(hook-custom-hooks)。
- 泛型自定义 Hook 用 <T> 参数化输入输出类型(hook-generic-hooks)。
- 事件处理函数使用 React 提供的事件类型模式(event-handler-types)。
- 点击事件使用 React.MouseEvent<HTMLButtonElement> 等具体类型(event-click-handler)。
- 表单事件区分 submit、change、select,分别使用 React.FormEvent、React.ChangeEvent 等(event-form)。
- 键盘事件使用 React.KeyboardEvent 并访问 key/code 属性(event-keyboard)。
- useRef 引用 DOM 时使用具体 HTML 元素类型,如 useRef<HTMLInputElement>(null)(ref-dom-elements)。
- 需要测量 DOM 时使用 callback ref 模式(ref-callback)。
- useImperativeHandle 显式声明暴露给父组件的命令式接口类型(ref-imperative-handle)。
- 泛型列表组件用 <T> 参数化 items、renderItem、keyExtractor(generic-list)。
- 泛型下拉/选择组件用 <T> 参数化选项类型(generic-select)。
- 泛型表格组件为列定义类型化的 columns(generic-table)。
- 泛型约束使用 extends 限制类型参数范围(generic-constraints)。
- 创建 Context 时用 createContext<T | null>(null) 并导出类型(ctx-create)。
- Provider 模式配合 null 检查的自定义 hook 使用(ctx-provider)。
- Context 与 useReducer 结合时,将 state 与 dispatch 分别放入 context 并标注类型(ctx-reducer)。
- 扩展 HTML 元素 props 时使用 ComponentPropsWithoutRef<'button'> 等工具类型(util-component-props)。
- 用 Pick、Omit、Partial 从已有类型派生 props 类型(util-pick-omit)。
- 用可辨识联合建模状态机,避免多个布尔标志(util-discriminated-unions)。