PHPStan can recognise we check if array key exists:
<?php declare(strict_types = 1);
/** @return array<mixed> */
function returnMixedArray(): array {
    return [];
}
/**
 * @return array{
 *     existing_key: mixed
 * }
 */
function narrowMixedArrayKeys(): array {
    $foo = returnMixedArray();
    assert(array_key_exists('existing_key', $foo));
    
    return $foo;
}
I want to check multiple keys' existence, and make PHPStan realise what I'm doing.
I tried writing a generic function, but PHPStan doesn't understand what I'm trying to tell it:
<?php declare(strict_types = 1);
/**
 * @param string $keys
 * @param array<int|string> $array
 */
function assertKeys(array $array, string ...$keys): void {
    foreach ($keys as $key) {
        assert(array_key_exists($key, $array));
    }
}
Is there a way to make PHPStan understand a function asserts the existence of a key?
I realise I should be using objects instead of arrays, I'm forced to work with legacy code I want to secure for now.