typescript - 打字稿自定义类型不可分配给自定义类型
问题描述
让我举个例子让问题变得简单。
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
.
解决方案
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);
});