@@ -3,6 +3,17 @@ namespace Psalm\Type\Atomic;
 
 class TString extends Scalar
 {
+    /** @var array<string|int, bool>|null */
+    public $values;
+
+    /**
+     * @param array<string|int, bool>|null $values
+     */
+    public function __construct(array $values = null)
+    {
+        $this->values = $values;
+    }
+
     public function __toString()
     {
         return 'string';
<?php
namespace Psalm\Type\Atomic;

class TString extends Scalar
{
    public function __toString()
    {
        return 'string';
    }

    /**
     * @return string
     */
    public function getKey()
    {
        return 'string';
    }
}

I've been thinking about something similar. What's the reason for choosing this implementation over `TLiteralString extends Scalar` (something that can cast to/from a TString). E.g. if a variable could have three possible string values, it could be a union type of 3 TLiteralString types instead of a union type with a single type (with 3 possible strings), which would seem like it would make merging branches easier