code: function createExactChecker(shapeTypes) {
  
      return createChainableChecker(function (data, dataName, componentName, fullDataName, secret) {
  
          if (getDataType(shapeTypes) !== 'object') {
              throw new Error('[SAN ERROR] '
                  + 'Data `' + dataName + '` of `' + componentName + '` has invalid '
                  + 'DataType notation inside `exact`'
              );
          }
  
          var dataValue = data[dataName];
          var dataValueType = getDataType(dataValue);
  
          if (dataValueType !== 'object') {
              throw new Error('[SAN ERROR] '
                  + 'Invalid data `' + fullDataName + '` of type `' + dataValueType + '`'
                  + '(supplied to ' + componentName + ', expected `object`)'
              );
          }
  
          var allKeys = {};
  
          // 先合入 shapeTypes
          extend(allKeys, shapeTypes);
          // 再合入 dataValue
          extend(allKeys, dataValue);
          // 保证 allKeys 的类型正确
  
          for (var key in allKeys) {
              /* istanbul ignore else  */
              if (allKeys.hasOwnProperty(key)) {
                  var checker = shapeTypes[key];
  
                  // dataValue 中有一个多余的数据项
                  if (!checker) {
                      throw new Error('[SAN ERROR] '
                          + 'Invalid data `' + fullDataName + '` key `' + key + '` '
                          + 'supplied to `' + componentName + '`. '
                          + '(`' + key + '` is not defined in `DataTypes.exact`)'
                      );
                  }
  
                  if (!(key in dataValue)) {
                      throw new Error('[SAN ERROR] '
                          + 'Invalid data `' + fullDataName + '` key `' + key + '` '
                          + 'supplied to `' + componentName + '`. '
                          + '(`' + key + '` is marked `required` in `DataTypes.exact`)'
                      );
                  }
  
                  checker(
                      dataValue,
                      key,
                      componentName,
                      fullDataName + '.' + key,
                      secret
                  );
  
              }
          }
  
      });
  
  }
docs: 生成 exact 校验器
  
  @param  {Object} shapeTypes object 形态定义
  @return {Function}