code: protected function typecastValue($value, $type)
      {
          if (is_scalar($type)) {
              if (is_object($value) && method_exists($value, '__toString')) {
                  $value = $value->__toString();
              }
  
              switch ($type) {
                  case self::TYPE_INTEGER:
                      return (int) $value;
                  case self::TYPE_FLOAT:
                      return (float) $value;
                  case self::TYPE_BOOLEAN:
                      return (bool) $value;
                  case self::TYPE_STRING:
                      if (is_float($value)) {
                          return StringHelper::floatToString($value);
                      }
                      return (string) $value;
                  default:
                      throw new InvalidArgumentException("Unsupported type '{$type}'");
              }
          }
  
          return call_user_func($type, $value);
      }
docs: Casts the given value to the specified type.
  @param mixed $value value to be type-casted.
  @param string|callable $type type name or typecast callable.
  @return mixed typecast result.