【发布时间】:2019-09-18 06:23:48
【问题描述】:
使用以下代码,我们生成两个数组:
const PROVIDERS: {
PROVIDER_1: 'PROVIDER_1';
PROVIDER_2: 'PROVIDER_2';
PROVIDER_3: 'PROVIDER_3';
} = {
PROVIDER_1: 'PROVIDER_1',
PROVIDER_2: 'PROVIDER_2',
PROVIDER_3: 'PROVIDER_3',
};
const GOOD_PROVIDERS = [PROVIDERS.PROVIDER_1, PROVIDERS.PROVIDER_2];
const BAD_PROVIDERS = [PROVIDERS.PROVIDER_3];
类型有:
const GOOD_PROVIDERS: ("PROVIDER_1" | "PROVIDER_2")[]
const BAD_PROVIDERS: ("PROVIDER_3"")[]
然后,如果我尝试检查某个值是否包含在其中一个数组中,我会遇到几个我不知道如何处理的编译错误:
const provider: 'PROVIDER_1' | 'PROVIDER_2' | 'PROVIDER_3' = getProvider();
const isGood = GOOD_PROVIDERS.includes(provider);
const isBad = BAD_PROVIDERS.includes(provider);
GOOD_PROVIDERS 的包含抛出此错误
'"PROVIDER_1" 类型的参数 | "PROVIDER_2" | “PROVIDER_3”' 不是 可分配给“PROVIDER_1”类型的参数 | “PROVIDER_2”。类型 '"PROVIDER_3"' 不可分配给类型 '"PROVIDER_1" | "PROVIDER_2"'.ts(2345)
BAD_PROVIDERS 的包含抛出此错误
'"PROVIDER_1" 类型的参数 | "PROVIDER_2" | “PROVIDER_3”' 不可分配给“PROVIDER_3”' 类型的参数。 类型 '"PROVIDER_1"' 不可分配给类型 '"PROVIDER_3"'.ts(2345)
为什么 Array.includes 假定参数已经在列表中?还有其他方法可以检查吗?
【问题讨论】:
-
我找到了这个关于类型定义的解释github.com/Microsoft/TypeScript/issues/26255
标签: typescript