使用以下代码,我们生成两个数组:
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) …
具有以下代码:
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 ×2