code: function createChainableChecker(validate) {
      /* istanbul ignore next */
      var chainedChecker = function () {};
      chainedChecker.isRequired = empty;
  
      // 只在 error 功能启用时才有实际上的 dataTypes 检测
      // #[begin] error
      validate = validate || empty;
      var checkType = function (isRequired, data, dataName, componentName, fullDataName) {
  
          var dataValue = data[dataName];
          var dataType = getDataType(dataValue);
  
          /* istanbul ignore next */
          componentName = componentName || ANONYMOUS_CLASS_NAME;
  
          // 如果是 null 或 undefined，那么要提前返回啦
          if (dataValue == null) {
              // 是 required 就报错
              if (isRequired) {
                  throw new Error('[SAN ERROR] '
                      + 'The `' + dataName + '` '
                      + 'is marked as required in `' + componentName + '`, '
                      + 'but its value is ' + dataType
                  );
              }
              // 不是 required，那就是 ok 的
              return;
          }
  
          validate(data, dataName, componentName, fullDataName);
  
      };
  
      chainedChecker = bind(checkType, null, false);
      chainedChecker.isRequired = bind(checkType, null, true);
      // #[end]
  
      return chainedChecker;
  
  }
docs: #[end] 
  创建链式的数据类型校验器
  
  @param  {Function} validate 真正的校验器
  @return {Function}