code: @BindTypeVariable
      public Typed<TARGET> getTargetType() {
          final TARGET_POSITION target = getTargetPosition();
          final Type targetPositionType = TypeUtils.unrollVariables(
              TypeUtils.getTypeArguments(getClass(), Transform.class), Transform.class.getTypeParameters()[3]);
          if (TypeUtils.isAssignable(targetPositionType, Position.Readable.class)) {
              final Type result = narrow((Position.Readable<TARGET>) target);
              if (!TypeUtils.equals(result, target.getType())) {
                  return new Typed<TARGET>() {
  
                      @Override
                      public Type getType() {
                          return result;
                      }
                  };
              }
          }
          return target;
      }
docs: Get the narrowest possible target type. If this {@link Transform} operation maps its {@code TARGET_POSITION} type
  parameter as some {@link Readable} then this will be deduced from target position type/value, else the target
  position will be returned.
  
  @return Typed