code: public TypePair getTypesUnderShallowInequality(JSType that) {
      // union types
      if (that.isUnionType()) {
        TypePair p = that.toMaybeUnionType().getTypesUnderShallowInequality(this);
        return new TypePair(p.typeB, p.typeA);
      }
  
      // Other types.
      // There are only two types whose shallow inequality is deterministically
      // true -- null and undefined. We can just enumerate them.
      if ((isNullType() && that.isNullType()) || (isVoidType() && that.isVoidType())) {
        return new TypePair(null, null);
      } else {
        return new TypePair(this, that);
      }
    }
docs: Computes the subset of {@code this} and {@code that} types under
  shallow inequality.
  
  @return A pair containing the restricted type of {@code this} as the first
  component and the restricted type of {@code that} as the second
  element. The returned pair is never {@code null} even though its
  components may be {@code null}