gpt4 book ai didi

javascript - 如果该值未定义, typescript 是否有返回值或抛出异常的语法糖?

转载 作者:行者123 更新时间:2023-12-05 02:35:55 29 4
gpt4 key购买 nike

我发现自己很想做这样的事情(伪代码):

const something = somethingElse || throw an error

如果 somethingElse 是假的,这会抛出一个错误。这是另一个例子,用真实的 typescript 写成:

const accessToken = process.env.ACCESS_TOKEN ?? throw new Error("The environment variable ACCESS_TOKEN was undefined or null");

这不会编译,因为右侧需要是一个表达式。 有没有一种方法可以编写功能上与上述代码等效的代码,同时在简洁性方面具有可比性?

我可以执行以下操作,但我发现打字很讨厌,而且会占用大量垂直空间:

  const accessToken = process.env.PATREON_CREATORS_ACCESS_TOKEN;
if (accessToken === undefined) {
throw new Error("The environment variable PATREON_CREATORS_ACCESS_TOKEN was undefined");
}

我还可以创建一些实用函数,您可以在其中传递一些可能是虚假的东西,如果它是虚假的,则抛出错误。但我想知道 typescript/javascript 是否提供了一些巧妙的语法来实现这一点,所以我不必创建这样的函数。

最佳答案

目前在 TypeScript 中不存在。一般来说,TypeScript 不采用从非 JavaScript 语法生成 JavaScript 输出的功能。 (好吧,它不再了。一些较旧的功能,如 enumsparameter properties 肯定是这样的。但如果这些功能尚不存在,它们将被拒绝,如果你今天建议他们。)如果你file a new feature request您应该选中一个框以确认该建议“不是运行时功能(例如库功能、带有 JavaScript 输出的非 ECMAScript 语法、JS 的新语法糖等)”。从现在开始,如果我们想在 TypeScript 中看到新的运行时特性,它们应该是 proposed to TC39 , 一旦提案进入 the TC39 process 的第 3 阶段,TypeScript 将实现它.

有一个existing proposal for "throw expressions"自 2017 年某个时候以来一直处于第 2 阶段,因此看起来并不乐观。在 microsoft/TypeScript#18535 处还有一个 TypeScript GitHub 问题并停留在“等待 TC39”状态。我想我们不会很快看到这一点。


throw 表达式提案中,有一个解决方法可以实现类似 throwable 表达式的东西:

const __throw = (err: any) => { throw err; };

您可以在您的示例中看到:

process.env.ACCESS_TOKEN = (Math.random() < 0.5) ? "a token" : undefined;

const accessToken = process.env.ACCESS_TOKEN ??
__throw(new Error("The environment variable ACCESS_TOKEN was undefined or null"));
// maybe 💥 The environment variable ACCESS_TOKEN was undefined or null

// but if it gets here then the compiler knows accessToken is defined:
console.log(accessToken.toUpperCase()); // A TOKEN

所以这可能是您目前可以获得的最接近的值;您可以编写自己的自定义实用程序函数,也可以低温保存自己,直到 throw 表达式到达 TC39 流程的第 3 阶段。

Playground link to code

关于javascript - 如果该值未定义, typescript 是否有返回值或抛出异常的语法糖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70408674/

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