code: @SuppressWarnings("unchecked")
  	public static TypeInformation createExternalTypeInfoFromInternalType(InternalType type) {
  		TypeInformation typeInfo = INTERNAL_TYPE_TO_EXTERNAL_TYPE_INFO.get(type);
  		if (typeInfo != null) {
  			return typeInfo;
  		}
  
  		if (type instanceof RowType) {
  			RowType rowType = (RowType) type;
  			return new RowTypeInfo(Arrays.stream(rowType.getFieldTypes())
  					.map(TypeConverters::createExternalTypeInfoFromInternalType)
  					.toArray(TypeInformation[]::new),
  					rowType.getFieldNames());
  		} else if (type instanceof ArrayType) {
  			return ObjectArrayTypeInfo.getInfoFor(
  					createExternalTypeInfoFromInternalType(((ArrayType) type).getElementType()));
  		} else if (type instanceof MapType) {
  			MapType mapType = (MapType) type;
  			return new MapTypeInfo(
  					createExternalTypeInfoFromInternalType(mapType.getKeyType()),
  					createExternalTypeInfoFromInternalType(mapType.getValueType()));
  		} else if (type instanceof MultisetType) {
  			MultisetType multisetType = (MultisetType) type;
  			return MultisetTypeInfo.getInfoFor(
  				createExternalTypeInfoFromInternalType(multisetType.getElementType()));
  		}
  		else if (type instanceof DecimalType) {
  			DecimalType decimalType = (DecimalType) type;
  			return new BigDecimalTypeInfo(decimalType.precision(), decimalType.scale());
  		}  else if (type instanceof GenericType) {
  			GenericType genericType = (GenericType) type;
  			return genericType.getTypeInfo();
  		} else {
  			throw new UnsupportedOperationException("Not support yet: " + type);
  		}
  	}
docs: Create a external {@link TypeInformation} from a {@link InternalType}.
  
  <p>eg:
  {@link InternalTypes#STRING} => {@link BasicTypeInfo#STRING_TYPE_INFO}.
  {@link RowType} => {@link RowTypeInfo}.