Skip to content

Commit 7fd1617

Browse files
authored
Improve types of InteractsWithData::whenEnum (#60507)
1 parent f22a1c8 commit 7fd1617

2 files changed

Lines changed: 27 additions & 4 deletions

File tree

src/Illuminate/Support/Traits/InteractsWithData.php

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -181,11 +181,15 @@ public function whenFilled($key, callable $callback, ?callable $default = null)
181181
/**
182182
* Apply the callback if the instance contains a valid enum value for the given key.
183183
*
184+
* @template TEnum of \BackedEnum
185+
* @template TReturn
186+
* @template TReturnDefault = never
187+
*
184188
* @param string $key
185-
* @param class-string<\BackedEnum> $enumClass
186-
* @param callable $callback
187-
* @param callable|null $default
188-
* @return $this|mixed
189+
* @param class-string<TEnum> $enumClass
190+
* @param callable(TEnum):TReturn $callback
191+
* @param (callable(): TReturnDefault)|null $default
192+
* @return $this|TReturn|TReturnDefault
189193
*/
190194
public function whenEnum($key, string $enumClass, callable $callback, ?callable $default = null)
191195
{

types/Support/Traits.php

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<?php
22

33
use Illuminate\Support\Traits\Localizable;
4+
use Illuminate\Support\UriQueryString;
45

56
use function PHPStan\Testing\assertType;
67

@@ -13,3 +14,21 @@ public function useWithLocale(): void
1314
assertType("'foo'", $this->withLocale('en', fn () => 'foo'));
1415
}
1516
};
17+
18+
$interactsWithData = function (UriQueryString $query): void {
19+
assertType('1|2|Illuminate\Support\UriQueryString', $query->whenEnum('foo', TestIntEnum::class, function ($enum) {
20+
assertType('TestIntEnum', $enum);
21+
22+
return 1;
23+
}, function () {
24+
return 2;
25+
}));
26+
27+
assertType('3|Illuminate\Support\UriQueryString', $query->whenEnum('foo', TestIntEnum::class, function ($enum) {
28+
return 3;
29+
}));
30+
};
31+
32+
enum TestIntEnum: int
33+
{
34+
}

0 commit comments

Comments
 (0)