src/com/google/javascript/rhino/jstype/JSType.java
/**
   * Coerces this type to an Object type, then gets the type of the property whose name is given.
   *
   * <p>Unlike {@link ObjectType#getPropertyType}, returns null if the property is not found.
   *
   * @return The property's type. {@code null} if the current type cannot have properties, or if the
   *     type is not found.
   */
Coerces this type to an Object type, then gets the type of the property whose name is given.
Unlike  ObjectType#getPropertyType, returns null if the property is not found.

@return The property's type.  null if the current type cannot have properties, or if the
type is not found.
Coerces this type to an Object type then gets the type of the property whose name is given . Unlike ObjectType#getPropertyType returns null if the property is not found . @return The property ' s type . null if the current type cannot have properties or if the type is not found .
@Nullable
  public final JSType findPropertyType(String propertyName) {
    @Nullable JSType propertyType = findPropertyTypeWithoutConsideringTemplateTypes(propertyName);
    if (propertyType == null) {
      return null;
    }
    if (getTemplateTypeMap().isEmpty() || !propertyType.hasAnyTemplateTypes()) {
      return propertyType;
    }
    TemplateTypeMap typeMap = getTemplateTypeMap();
    TemplateTypeReplacer replacer = TemplateTypeReplacer.forPartialReplacement(registry, typeMap);
    return propertyType.visit(replacer);
  }
@ Nullable public final JSType findPropertyType ( String propertyName ) { @ Nullable JSType propertyType = findPropertyTypeWithoutConsideringTemplateTypes ( propertyName ) ; if ( propertyType == null ) { return null ; } if ( getTemplateTypeMap ( ) . isEmpty ( ) || ! propertyType . hasAnyTemplateTypes ( ) ) { return propertyType ; } TemplateTypeMap typeMap = getTemplateTypeMap ( ) ; TemplateTypeReplacer replacer = TemplateTypeReplacer . forPartialReplacement ( registry , typeMap ) ; return propertyType . visit ( replacer ) ; }
Coerces this type to an Object type, then gets the type of the property whose name is given.
Coerces this type to an Object type then gets the type of the property whose name is given .
// Do templatized type replacing logic here, and make this method final, to prevent a subclass // from forgetting to replace template types