Typed Props Props 类型约束

最后更新:2026-10-28

Typed Props Props 类型约束

TypeScript 下用 interface/type 给 props 建类型契约:编译期就抓出「传错名、漏传、类型不符」,编辑器还有自动补全。定义一个类型形状标在组件参数上即可,运行时零成本。

分组数据与工程化
类型模式

ℹ️ 说明 编辑器将 JSX 转译为 JavaScript 后在沙箱中渲染真实界面;组件自动挂载,无需手写 render 调用。

📝 语法

type User = { id: number; name: string; vip?: boolean }  // ? 可选属性

type UserCardProps = {
  user: User
  onSelect: (id: number) => void     // 回调:参数与返回值都要标
  children?: React.ReactNode         // 任意可渲染内容
}

function UserCard({ user, onSelect }: UserCardProps) {
  return <li onClick={() => onSelect(user.id)}>{user.name}</li>
}

// ❌ 编译期报错:<UserCard user={{ id: 'x' }} />  id 应为 number

返回值:无返回值,作为编码模式使用

▶ 示例

示例可直接运行:展开后自动渲染,编辑代码即时生效。

输出结果:

表格展示 UserCard 的 props 类型契约;点用户按钮触发 onSelect 回调显示 id——真实 TS 项目里传错类型会在编译期直接报错(运行时 JSX 演示)。

💡 要点

💡 提示 从组件反推 props 类型用 React.ComponentProps<typeof UserCard>,避免手动维护两份定义。
ℹ️ 说明 children 用 React.ReactNode 最通用(元素、字符串、数组都收);只要元素用 React.ReactElement。
⚠️ 注意 any 等于关掉检查;不确定形状时用 unknown 再收窄,或用 Partial/Pick 等工具类型逐步细化。
更多案例整理中,敬请期待。

📚 相关教程

❓ 常见问题

Q type 和 interface 定义 props 用哪个?
A 都行。interface 可被声明合并、报错更友好;type 能表达联合类型与工具类型组合。团队统一即可。
Q 可选属性和默认值怎么配合?
A vip?: boolean 允许不传;解构参数给默认值 function X({ vip = false }: Props),两者语义对齐。
Q TS 能做运行时校验吗?
A 不能,TS 只在编译期。接口数据要运行时校验用 zod:z.object({...}).parse(data) 校验并推导类型。
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏