/**
 * 此注解如果赋值的时候匹配到的类型有问题，会在控制台显示警告
 * @param type CheckType 中定义的类型
 * @returns {Function}
 * @constructor
 */
export default function validateDecorator(type){
  return function (target, name, descriptor){
    let v = descriptor.initializer && descriptor.initializer.call(this);
    /**
     * 将属性名字以及需要的类型的对应关系记录到类的原型上
     */
    if (!target.constructor.__checkers__) {
      // 将这个隐藏属性定义成 not enumerable，遍历的时候是取不到的。
      Object.defineProperty(target.constructor, "__checkers__", {
        value: {},
        enumerable: false,
        writeable: true,
        configurable: true
      });
    }
    target.constructor.__checkers__[name] = {
      type: type,
    };
    return descriptor;
  };
}
