如何在自定义验证器中使用 PropType 内置函数?

How to use PropType inbuilt functions inside a custom validator?

我正在为 defaultValue prop 使用这个验证器(array 特定形状):

defaultValue: PropTypes.arrayOf(PropTypes.shape({
        key: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,
        value: PropTypes.string.isRequired
    }))

但是,现在 defaultValue 也可以是 string 类型了。所以我正在尝试自定义验证器:

defaultValue: function (props, propName, componentName) {
  if (typeof props[propName] === "string"){

  } else if (props[propName] instanceof Array){
      //how to add old functionality here?
  } else {
      return new Error(
        `Invalid prop ${propName} supplied to ${componentName}. Validation failed`
      )
  }

}

我可以在自定义验证器中使用旧的 PropTypes.arrayOf(....) 吗?我想将旧验证添加到新的自定义验证器函数中。如果无法使用 PropTypes,如何使用自定义代码实现同样的效果?

如果您只想将默认值设置为字符串或您的自定义类型,您可以将 oneOfType 与字符串和您的类型一起使用。

PropTypes.oneOfType([
      PropTypes.string,
      PropTypes.arrayOf(PropTypes.shape({
                key: PropTypes.oneOfType([PropTypes.string, 
                                          PropTypes.number]).isRequired,
                value: PropTypes.string.isRequired}))
])