phpstan -验证可以混合的数组

46qrfjad  于 2023-01-08  发布在  PHP
关注(0)|答案(1)|浏览(83)

我被一些phpstan验证阻止了,我有这个数组:

/** @var array<string, string|array<string>> $normalizedImage */
   $normalizedImage = $this->normalizer->normalize($data);
   $normalizedImage['@id'] = $this->iriConverter->getIriFromItem($data);
   $normalizedImage['property']['@id'] = $this->iriConverter->getIriFromItem($object);

错误为:
phpstan:无法将偏移量"@id "赋给数组|字符串。
我尝试了评论中的大多数组合,但我不知道该放在这里。

kb5ga3dv

kb5ga3dv1#

查看phpdoc

@psalm-return array{_labels?: array<string>}&array<int|string>
@phpstan-return array<int|string|array<string>>

我会说这并不奇怪,因为phpstan不支持类似于同时设置特定键类型和泛型键类型的类型,但这将是伟大的。
可通过以下方式修复:

<?php declare(strict_types = 1);

$result = [
    '@id' => [],
];

$labels = [];
foreach ([1, 2, 3] as $id) {
    $result[] = $id;
    $labels[] = 'asda';
}

$result['@id'] = $labels;

您可以在这里尝试:https://phpstan.org/try不再有错误

相关问题