getPropertyType()

in lib/semantic.js [2593:2627]


  getPropertyType(type, propName) {
    if (type.type === 'map') {
      if (type.valueType.name === 'any') {
        return _basic('any');
      }

      if (!type.valueType.name) {
        return type.valueType;
      }

      if (isBasicType(type.valueType.name)) {
        return _basic(type.valueType.name);
      }
      return this.getModel(type.valueType.name, type.valueType.moduleName);
    }

    if (type.type === 'model') {
      let model, checker = this;
      if (type.moduleName) {
        checker = this.dependencies.get(type.moduleName);
        model = checker.models.get(type.name);
      } else if (builtin.has(type.name)) {
        model = builtin.get(type.name);
      } else {
        model = this.models.get(type.name);
      }
      const find = checker.findProperty(model, propName, model.isException);
      if (!find) {
        return;
      }

      const moduleName = find.moduleName || type.moduleName;
      return this.getFieldType(find.modelField, find.modelName, moduleName);
    }
  }