gpt4 book ai didi

Typescript - 可选参数验证不足以在将其作为参数传递给另一个函数时确定类型?

转载 作者:行者123 更新时间:2023-12-02 16:39:57 26 4
gpt4 key购买 nike

乍一看这似乎是一个奇怪的问题,但我会尽力解释它。

让我们看看下面这个(非现实的)例子:

const foo = (x: number) => {
return x * x;
}

const isXUndefined = (x?: number) => x === undefined;

const boo = (x?: number) => {
if (isXUndefined(x)) {
return 0;
}

return foo(x);
}

正如预期的那样,此代码编译失败,因为 x 可以是 numberundefined。我在这里很难看到的是为什么调用 isXUndefined 不足以让类型推断器确保 x 是一个实际数字?

另一方面,一个可行的例子是:

const foo = (x: number) => {
return x * x;
}

const isXUndefined = (x?: number) => x === undefined;

const boo = (x?: number) => {
if (x === undefined) {
return 0;
}

return foo(x);
}

为什么这种验证只在“表面上”起作用而不是在另一个函数中起作用?

这是一个 playground两个例子

最佳答案

您可以通过执行以下操作来解决此问题

const foo = (x: number) => {
console.log("foo")
return x * x;
}

const isXUndefined = (x?: number) => x === undefined;

const boo = (x?: number) => {
if (isXUndefined(x)) {
return 0;
}

return foo(x!);
}

通过添加 !,您告诉编译器 x 在这里不会为 null 或 undefined,它也不会报错。

JSFiddle:https://jsfiddle.net/nrd7hmkp/

关于Typescript - 可选参数验证不足以在将其作为参数传递给另一个函数时确定类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61888297/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com