code: function findInheritedProperties(ci, properties) {
      while (ci && ci.extends) {
          ci = findTypeMetaInfo(ci.extends);
          if (!ci) {
              console.warn('no meta info for: ' + ci.extends);
              continue;
          }
          mergeProperties(ci).forEach(p => {
              if (properties.find(pp => pp.name === p.name)) {
                  return;
              }
              if (p.inheritance) {
                  return;
              }
              // deep copy
              p = JSON.parse(JSON.stringify(p));
              delete p.inheritance;
              p.inheritInfo = {from: ci.name, type: ci.type || ci.subtype};
              properties.push(p);
          });
      }
  }
docs: not including the current class's properties