首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建数组的交集类型

问如何创建数组的交集类型
EN

Stack Overflow用户
提问于 2020-04-07 22:59:51
回答 1查看 181关注 0票数 0

我试图实现的简化如下:

代码语言:javascript
复制
<?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:

代码语言:javascript
复制
ERROR: InvalidDocblock - 9:11 - Intersection types must all be objects, Psalm\Type\Atomic\ObjectLike provided in docblock for acceptFooAndBar

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-13 09:39:48

我把它报告为bug https://github.com/vimeo/psalm/issues/3095,并在https://github.com/vimeo/psalm/commit/09663b593895fb7e6a0ed789dfad11363999bfea上进行了修复

所以现在它正确地输入了检查。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61090755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档