fix: type empty arrays as unknown[] instead of [] - #290
Merged
joetannenbaum merged 3 commits intoAug 10, 2026
Conversation
|
Thanks for submitting a PR! Note that draft PRs are not reviewed. If you would like a review, please mark your pull request as ready for review in the GitHub user interface. Pull requests that are abandoned in draft may be closed due to inactivity. |
When converting an empty array type (Type::array([])) to TypeScript, the converter was producing an empty string instead of 'unknown[]'. This fixes the convertArrayResult method to return 'unknown[]' for empty arrays, which is the correct TypeScript representation. This is related to laravel#277 but the full fix for array casts requires an upstream change in laravel/surveyor to separate 'array' cast from 'json' and 'object' casts in ModelAnalyzer.php.
alaminfirdows
force-pushed
the
fix/array-cast-to-record
branch
from
July 25, 2026 01:44
d8c0d35 to
56191e6
Compare
alaminfirdows
marked this pull request as ready for review
July 25, 2026 01:49
alaminfirdows
marked this pull request as draft
July 25, 2026 01:51
alaminfirdows
marked this pull request as ready for review
July 25, 2026 02:32
Collaborator
|
Thank you! |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #277
Problem
Model
'array'casts are converted toRecord<string, unknown>in generated TypeScript types, even when they represent plain arrays.Example:
Current output:
Expected output:
Root Cause
In
laravel/surveyor'sModelAnalyzer.php, theresolveCast()method maps all these casts to the same type:This produces
Record<string, unknown>for all of them, but'array','encrypted:array', and'encrypted:collection'represent PHP arrays/lists, not objects.Fix
1. surveyor (upstream required)
Separate
'array'cast from'json'/'object'casts:Note: This change is in
vendor/laravel/surveyorand needs to be made upstream in the surveyor package.2. wayfinder
Fix empty array type conversion in
TypeScriptConverter::convertArrayResult():Before:
Type::array([])→[](invalid TypeScript)After:
Type::array([])→unknown[](valid)Tests
Added
tests/Unit/Registry/TypeScriptConverterTest.phpwith 6 tests:test_array_shape_with_unknown_key_produces_record_typetest_array_shape_with_number_key_produces_array_typetest_array_shape_with_string_key_produces_record_typetest_array_type_produces_array_typetest_json_cast_produces_record_typetest_array_cast_produces_array_typeAll unit tests pass.