weixin_39721953
weixin_39721953
2021-01-11 04:32

关于dataType的支持

和 讨论后,确定:

  1. 只做validate,不做类型转换先
  2. dev版本支持,release版本忽略

然后是形式:

json schema

太大了,而且只能支持json定义的类型(我没好好读spec,不知道对date这种常用的复合类型支持的怎样)

react propType

https://github.com/facebook/prop-types

这种方式,除了支持基本的类型外,还:

  • 支持required
  • 支持多类型
  • 支持枚举
  • 变相支持range
  • 支持深层次结构
  • 写起来挺烦的,比如定义一个数组,其中每项包含id,age,貌似就要 PropTypes.arrayOf(PropTypes.shape({id, age})) ?

类似vue,贴近JS

js
dataType= {
  name: String,
  age: Number,
  addr: {
    provider: String,
    city: String
  }
}

这种方式,除了支持基本的类型外,最多能支持深层次结构,但是很多值相关的就做不了了。当然,可以开放支持function来定制校验规则。如果内置校验规则,和 react propType 也没毛区别。

来讨论下

你俩觉得选哪种好

该提问来源于开源项目:baidu/san

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

4条回答

  • weixin_39795845 weixin_39795845 4月前

    json schema根据我和 先否定了,主要原因在于无法对element之类的非json类型进行校验

    另一方面来说,vue也存在这样的问题,并且vue开放function支持后,早晚会变成prop types这种样子

    所以综合来说,我选择prop types吧

    点赞 评论 复制链接分享
  • weixin_39817391 weixin_39817391 4月前

    现在看来 pro-types 只是写起来有点麻烦,其他没毛病,所以 prop types +1

    点赞 评论 复制链接分享
  • weixin_39721953 weixin_39721953 4月前

    ok,大家倾向都差不多,那 实现完了再关issue吧。不过我们是data不是prop,只能叫 DataTypes。

    
    var DataTypes = san.DataTypes;
    // blabla
    
    点赞 评论 复制链接分享
  • weixin_39817391 weixin_39817391 4月前

    不过我们是data不是prop,只能叫 DataTypes。

    好的没问题

    有个一小问题,defineComponent 出来的组件,没有组件名/类名,校验出来的报错都很难看。

    所以,是否要加一个给 defineComponent 加一个 displayName 之类的东西?

    点赞 评论 复制链接分享

相关推荐