docs: public boolean isAssignableTo(TypeDescriptor typeDescriptor) {
  		boolean typesAssignable = typeDescriptor.getObjectType().isAssignableFrom(getObjectType());
  		if (!typesAssignable) {
  			return false;
  		}
  		if (isArray() && typeDescriptor.isArray()) {
  			return getElementTypeDescriptor().isAssignableTo(typeDescriptor.getElementTypeDescriptor());
  		}
  		else if (isCollection() && typeDescriptor.isCollection()) {
  			return isNestedAssignable(getElementTypeDescriptor(), typeDescriptor.getElementTypeDescriptor());
  		}
  		else if (isMap() && typeDescriptor.isMap()) {
  			return isNestedAssignable(getMapKeyTypeDescriptor(), typeDescriptor.getMapKeyTypeDescriptor()) &&
  				isNestedAssignable(getMapValueTypeDescriptor(), typeDescriptor.getMapValueTypeDescriptor());
  		}
  		else {
  			return true;
  		}
  	}