如何创建交叉型数组?

问题描述 投票:0回答:1

我想实现的简化如下。

<?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.devrd08f3ea0d1

简而言之:我想 类型 一个函数,接受一个数组,这个数组是2个其他数组的交集。@psalm-types. 也就是说:一个数组有来自两个数组类型的字段(这些字段是唯一的,并且保证是不同的)。

这段代码正如预期的那样--不进行类型检查。

ERROR: InvalidDocblock - 9:11 - Intersection types must all be objects, Psalm\Type\Atomic\ObjectLike provided in docblock for acceptFooAndBar

除了坚持运行时断言检查,真的没有别的办法吗?

重要的是: 这个问题严格来说是关于静态类型的,我理解你可以在运行时检查。

php typing static-typing psalm-php
1个回答
1
投票

我把它作为一个错误报告了 https:/github.comvimeopsalmissues3095。 而它被固定在 https:/github.comvimeopsalmcommit09663b593895fb7e6a0ed789dfad11363999bfea。

所以现在它的打字检查是正确的。

© www.soinside.com 2019 - 2024. All rights reserved.