public function has(string $typeName): bool
    {
        if (isset($this->shared[$typeName]) || isset($this->definitions[$typeName])) {
            return true;
        }
        
        if (!isset($this->typeCache[$typeName])) {
            if (\class_exists($typeName) || \interface_exists($typeName, false)) {
                $this->typeCache[$typeName] = new \ReflectionClass($typeName);
            } else {
                $this->typeCache[$typeName] = false;
            }
        }
        
        return $this->typeCache[$typeName] !== false && $this->typeCache[$typeName]->isInstantiable();
    }