From b93443054f227f1723eb8e768b70d105a6d0d23b Mon Sep 17 00:00:00 2001 From: Ken van der Eerden Date: Fri, 17 Oct 2025 15:37:11 +0200 Subject: [PATCH 1/3] Bugfix allow integer key to define typescript array Add check for Integer type in isTypeScriptArray method --- src/Actions/TranspileTypeToTypeScriptAction.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Actions/TranspileTypeToTypeScriptAction.php b/src/Actions/TranspileTypeToTypeScriptAction.php index 448e6f0..5d28afc 100644 --- a/src/Actions/TranspileTypeToTypeScriptAction.php +++ b/src/Actions/TranspileTypeToTypeScriptAction.php @@ -133,6 +133,10 @@ private function resolveSelfReferenceType(): string private function isTypeScriptArray(Type $keyType): bool { + if ($keyType instanceof Integer) { + return true; + } + if (! $keyType instanceof Compound) { return false; } From 587ab39d01fe86008d5d751d055e3fe9237b86fd Mon Sep 17 00:00:00 2001 From: Ken van der Eerden Date: Wed, 19 Nov 2025 11:53:57 +0100 Subject: [PATCH 2/3] Update docblock regex to support array shape --- src/TypeReflectors/PropertyTypeReflector.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/TypeReflectors/PropertyTypeReflector.php b/src/TypeReflectors/PropertyTypeReflector.php index be7a16d..3e94741 100644 --- a/src/TypeReflectors/PropertyTypeReflector.php +++ b/src/TypeReflectors/PropertyTypeReflector.php @@ -24,7 +24,7 @@ protected function getDocblock(): string protected function docblockRegex(): string { - return '/@var ((?:\s?[\\w?|\\\\<>,-]+(?:\[])?)+)/'; + return '/@var ((?:\s?[\\w?|\\\\<>,-\{\}]+(?:\[])?)+)/'; } protected function getReflectionType(): ?ReflectionType From eb783d358346d6b2196980d316b8882eccebca0d Mon Sep 17 00:00:00 2001 From: Ken van der Eerden Date: Wed, 19 Nov 2025 12:31:56 +0100 Subject: [PATCH 3/3] Implement ArrayShape type resolution Add support for ArrayShape type resolution in TypeScript. --- src/Actions/TranspileTypeToTypeScriptAction.php | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/Actions/TranspileTypeToTypeScriptAction.php b/src/Actions/TranspileTypeToTypeScriptAction.php index 5d28afc..013d2e5 100644 --- a/src/Actions/TranspileTypeToTypeScriptAction.php +++ b/src/Actions/TranspileTypeToTypeScriptAction.php @@ -4,6 +4,7 @@ use Exception; use phpDocumentor\Reflection\PseudoType; +use phpDocumentor\Reflection\PseudoTypes\ArrayShape; use phpDocumentor\Reflection\Type; use phpDocumentor\Reflection\Types\AbstractList; use phpDocumentor\Reflection\Types\Boolean; @@ -51,6 +52,7 @@ public function execute(Type $type): string $type instanceof AbstractList => $this->resolveListType($type), $type instanceof Nullable => $this->resolveNullableType($type), $type instanceof Object_ => $this->resolveObjectType($type), + $type instanceof ArrayShape => $this->resolveArrayShapeType($type), $type instanceof StructType => $this->resolveStructType($type), $type instanceof RecordType => $this->resolveRecordType($type), $type instanceof TypeScriptType => (string) $type, @@ -106,6 +108,18 @@ private function resolveObjectType(Object_ $object): string ); } + private function resolveArrayShapeType(ArrayShape $type): string + { + $transformed = "{"; + + foreach ($type->getItems() as $type) { + $q = $type->isOptional() ? '?' : ''; + $transformed .= "{$type->getKey()}{$q}:{$this->execute($type->getValue())};"; + } + + return "{$transformed}}"; + } + private function resolveStructType(StructType $type): string { $transformed = "{";