首页 > 解决方案 > 打字稿自定义类型不可分配给自定义类型

问题描述

让我举个例子让问题变得简单。

type TA = 1 | 2;
type TB = 3 | 4;
type TC = TA | TB;

const a: TA[] = [1, 2];
const b: TC[] = [1, 2, 3, 4];

b.forEach((e) => {
  a.includes(e);
            ^^^
});

typeTC的参数不能分配给 type 的参数TA。类型3不可分配给 type TA

我知道它不起作用的原因,但我找不到任何解决方案来检查a是否包含e.

标签: typescript

解决方案


include接受与数组元素相同类型的元素。在这种情况下,该类型是TA. 所以TC(虽然 and 的TA并集TB)可能不是同一类型。

现在include是一种特殊情况,而对于数字数组,我们可能不希望将字符串传递给包含,对于文字类型的联合,我们实际上希望能够传入一个参数这可能是数组中的一种文字类型,因为测试是否存在实际上就是include这样做的。不幸的是,TS 没有办法轻松建模“如果数组元素是文字类型,则允许传入基本类型”

这里最简单、最有针对性的解决方案是类型断言:

type TA = 1 | 2;
type TB = 3 | 4;
type TC = TA | TB;

const a: TA[] = [1, 2];
const b: TC[] = [1, 2, 3, 4];

b.forEach((e) => {
  a.includes(e as TA);
});

游乐场链接


推荐阅读