|
10 | 10 | * @param array<int, int> $array3
|
11 | 11 | * @param list<string> $list
|
12 | 12 | * @param non-empty-array<int> $nonEmptyArray
|
| 13 | + * @param array{foo: string, 0?: int} $arrayShape1 |
| 14 | + * @param array{foo: string, bar?: int} $arrayShape2 |
13 | 15 | */
|
14 |
| -function test(array $array1, array $array2, array $array3, array $list, array $nonEmptyArray): void |
| 16 | +function test(array $array1, array $array2, array $array3, array $list, array $nonEmptyArray, array $arrayShape1, array $arrayShape2): void |
15 | 17 | {
|
16 | 18 | assertType('array<int|string, int>', array_uintersect($array1, $array2, static function (mixed $a, mixed $b) {
|
17 | 19 | assertType('int', $a);
|
@@ -68,4 +70,25 @@ function test(array $array1, array $array2, array $array3, array $list, array $n
|
68 | 70 |
|
69 | 71 | return $a <=> $b;
|
70 | 72 | }));
|
| 73 | + |
| 74 | + assertType('array<int|string, int>', array_uintersect($array1, $arrayShape1, static function (mixed $a, mixed $b) { |
| 75 | + assertType('int', $a); |
| 76 | + assertType('int|string', $b); |
| 77 | + |
| 78 | + return $a <=> $b; |
| 79 | + })); |
| 80 | + |
| 81 | + assertType("array<'foo'|0, int|string>", array_uintersect($arrayShape1, $array1, static function (mixed $a, mixed $b) { |
| 82 | + assertType('int|string', $a); |
| 83 | + assertType('int', $b); |
| 84 | + |
| 85 | + return $a <=> $b; |
| 86 | + })); |
| 87 | + |
| 88 | + assertType("array<'bar'|'foo', string>", array_uintersect($arrayShape2, $array1, static function (mixed $a, mixed $b) { |
| 89 | + assertType('int|string', $a); |
| 90 | + assertType('int', $b); |
| 91 | + |
| 92 | + return $a <=> $b; |
| 93 | + })); |
71 | 94 | }
|
0 commit comments