You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js使用PropTypes.shape报is not a function错误咨询

问题原因分析

1. 为什么PropTypes.shape()调用报错

核心原因有两个:

  • 你将prop-types安装在了devDependencies中,Next.js的服务端渲染构建流程中,部分场景下不会完整加载devDependencies下的依赖包。你调用PropTypes.object看起来正常,实际此时导入的PropTypes对象是不完整的,缺失了shape、arrayOf这类高级校验方法。
  • 本地node_modules依赖存在缓存损坏,导致prop-types包导出的对象异常。

2. 为什么直接写嵌套对象的写法不报错

你补充的嵌套对象写法不符合当前prop-types包的使用规范,这种写法仅仅是没有语法错误,并不会触发内部属性的校验:就算你给data下的heading传入数字类型的值,也不会收到任何PropTypes的警告,相当于校验规则完全不生效。

解决方案
  • 把prop-types从devDependencies移动到dependencies中,执行命令:
npm uninstall prop-types
npm install prop-types

也可以直接手动修改package.json,把prop-types的配置行移到dependencies字段下,再执行npm install。

  • 清理本地构建缓存和依赖缓存,执行:
rm -rf .next node_modules package-lock.json
npm install

重启项目后PropTypes.shape()就能正常使用。

什么时候使用PropTypes.shape()

当你需要对对象类型的prop的内部属性做精准校验时,就需要使用PropTypes.shape():

  • 可以指定对象内部每个属性的类型、是否必填
  • 传参不符合规则时会在控制台抛出清晰的警告,便于开发阶段快速定位传参错误
  • 如果只用PropTypes.object,只会校验参数是不是对象,不会校验内部属性是否存在、类型是否正确,开发阶段的错误提示能力非常有限。

内容的提问来源于stack exchange,提问作者Chris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 14:09:03