Typescript-与包含类型数组配合使用时发生意外错误

时间:2019-04-29 15:34:45

标签: typescript

使用以下代码,我们生成两个数组:

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假定参数已在列表中?还有其他方法可以检查吗?

0 个答案:

没有答案