gpt4 book ai didi

typescript - 如何内联检查空值并在 typescript 中引发错误?

转载 作者:行者123 更新时间:2023-12-03 13:43:54 24 4
gpt4 key购买 nike

在 C# 中,我可以编写代码来检查空引用,以防抛出自定义异常,例如:

var myValue = (someObject?.SomeProperty ?? throw new Exception("...")).SomeProperty;

在最近的更新中,TypeScript 引入了空合并运算符 ??但是像上面的语句一样使用它会产生编译错误。
TypeScript 中是否有一些类似的允许语法?

澄清一下,所需的行为是通过以下代码实现的:
  if(someObject?.someProperty == null) {
throw new Error("...");
}

var myValue = someObject.someProperty.someProperty;

代码:
  var myValue = someObject?.someProperty.someProperty;

在逻辑上工作正常,但抛出一个意义不大的异常。

最佳答案

语法错误的原因是throw是一个语句,因此您不能将其用作运算符的操作数。
有一个JavaScript proposal for throw expressions正在通过 TC39 流程,目前处于第 2 阶段。如果它进入第 3 阶段,您可以预期它将在此后很快出现在 TypeScript 中。 (在 2020 年底更新:但是,它似乎已经停滞不前,被一个 TC39 成员 blocked in Jan 2018 认为他们没有“......如果我们有 do 表达式就足够有动力......”注意do 表达式在 2020 年底仍是第一阶段,但至少它们已提交给 TC39 in June。)
throw表达式,你可以这样写(如果你想要 someObject.someProperty 的值):

const myValue = someObject?.someProperty ?? throw new Error("custom error here");
或者如果你想要 someObject.someProperty.someProperty (这就是我认为您的 C# 版本所做的):
const myValue = (someObject?.someProperty ?? throw new Error("custom error here")).someProperty;
有一个 Babel plugin for it你现在可以使用了。 Here's the first example above在 Babel 的 REPL 上。

旁注:你说过你想扔一个 定制 错误,但对于其他不需要自定义错误的人来说:
如果你想要 someObject.someProperty.someProperty , 如果 someObject 没有错误是 null/ undefined但是如果 someObject.someProperty 会出错是 null/ undefined ,你可以这样做:
const myValue = someObject?.someProperty.someProperty;
有了这个:
  • someObjectnullundefined , myValue将得到值 undefined
  • someObject不是 nullundefined但是 someObject.somePropertynullundefined ,你会得到一个错误,因为我们没有使用 ?.第一次后someProperty .
  • someObjectsomeObject.someProperty两者都不是 nullundefined , myValue将得到查找结果someObject.someProperty.someProperty .
  • 关于typescript - 如何内联检查空值并在 typescript 中引发错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60884426/

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