diff --git a/src/Types/Types.php b/src/Types/Types.php index c26b9ef..23efda8 100644 --- a/src/Types/Types.php +++ b/src/Types/Types.php @@ -40,6 +40,7 @@ public function determineType(mixed $value) is_int($value) => self::NUMBER, is_float($value) => self::NUMBER, is_array($value) => $this->processArray($value), + $value instanceof \BackedEnum => $this->processEnum($value), $value instanceof ResourceCollection => TypescriptType::determineName($value->collects).'[]', $value instanceof JsonResource => TypescriptType::determineName(get_class($value)), $value instanceof Arrayable => $this->processArray($value->toArray()), // TODO: Test for this @@ -62,4 +63,9 @@ private function processArray(array $value) return $types->join('|').'[]'; } + + private function processEnum(\BackedEnum $value) + { + return join(' | ', Arr::map(array_column($value::cases(), 'value'), fn ($val) => is_string($val) ? "'$val'" : $val)); + } } diff --git a/tests/Fakes/Enums/TestEnum.php b/tests/Fakes/Enums/TestEnum.php new file mode 100644 index 0000000..d441515 --- /dev/null +++ b/tests/Fakes/Enums/TestEnum.php @@ -0,0 +1,9 @@ + 'name', 'value' => 1], '{name:string,value:number}'], [['name' => 'name', 'values' => ['name' => 'value']], '{name:string,values:{name:string}}'], [(object) ['name' => 'name', 'value' => 1], '{name:string,value:number}'], + [TestEnum::VALUE_1, '\'enum-value-1\' | \'enum-value-2\''], ]);