我试图实现的简化如下:
<?php
/**
* @psalm-type Foo=array{foo: string}
* @psalm-type Bar=array{bar: int}
*/
/**
* @param Foo&Bar $v
*/
function acceptFooAndBar(array $v): void {
echo sprintf('%s %d', $v['foo'], $v['bar']);
}
acceptFooAndBar(['foo' => 'f', 'bar' => 42]);https://psalm.dev/r/d08f3ea0d1
简而言之:我正在尝试键入一个函数,该函数接受一个数组,该数组是其他两个@psalm-types的交集。也就是说:数组有来自两种数组类型的字段(这些字段是唯一的,并且保证是不同的)。
此代码与预期一样-不键入check:
ERROR: InvalidDocblock - 9:11 - Intersection types must all be objects, Psalm\Type\Atomic\ObjectLike provided in docblock for acceptFooAndBar除了坚持运行时断言/检查之外,真的没有别的办法吗?
重要:这个问题严格来说是关于静态类型的,我知道您可以在运行时检查它。
发布于 2020-05-13 09:39:48
我把它报告为bug https://github.com/vimeo/psalm/issues/3095,并在https://github.com/vimeo/psalm/commit/09663b593895fb7e6a0ed789dfad11363999bfea上进行了修复
所以现在它正确地输入了检查。
https://stackoverflow.com/questions/61090755
复制相似问题