小编seb*_*bab的帖子

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];
Run Code Online (Sandbox Code Playgroud)

类型是:

const GOOD_PROVIDERS: ("PROVIDER_1" | "PROVIDER_2")[]
const BAD_PROVIDERS: ("PROVIDER_3"")[]
Run Code Online (Sandbox Code Playgroud)

然后,如果我尝试检查一个值是否包含在这些数组之一中,我将面临几个我不知道如何处理的编译错误:

const provider: 'PROVIDER_1' | 'PROVIDER_2' | 'PROVIDER_3' = getProvider();
const isGood = GOOD_PROVIDERS.includes(provider);
const isBad = BAD_PROVIDERS.includes(provider);
Run Code Online (Sandbox Code Playgroud)

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) …

typescript

6
推荐指数
2
解决办法
744
查看次数

使用打字稿中的if语句删除空检查

具有以下代码:

function A(arg1?: string, arg2?: number) {
  if (!arg1 && !arg2) {
    throw new Error('At least one of two parameters must be present');
  }
  B(arg1 || arg2);
}

function B(arg3: string | number) {
  // does something. we don't really care
}
Run Code Online (Sandbox Code Playgroud)

Typescript对该表达式抛出以下编译错误B(arg1 || arg2)

类型'string |的参数 编号 不可分配给'string |类型的参数 数'。

类型'undefined'不能分配给类型'string | 数'。ts(2345)

但是,在函数AI中,请确保至少没有定义一个参数,在这种情况下会引发错误。这意味着在表达式中B(arg1 || arg2),参数永远不会是未定义的,它将始终是数字或字符串。

我的假设有问题吗?有什么办法可以使打字稿理解它?

typescript

3
推荐指数
1
解决办法
251
查看次数

标签 统计

typescript ×2