问题标签 [optional-chaining]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
209 浏览

javascript - 关于 PhpStorm 中可选链接和空值合并 JavaScript 运算符支持的问题

我想问是否有人知道如何支持 PhpStorm 中的 JavaScript 空值合并运算符 ( ??) 和可选链接运算符 ( ?.)。

目前我正在 PhpStorm 中开发一个 react-native 项目,两个运算符都工作正常,但 PhpStorm 设置了一个expression expected错误,并且所有使用这些运算符的文件都带有错误下划线。

如何添加对这些功能的支持以使 IDE 满意?

0 投票
2 回答
5114 浏览

prettier - 更漂亮:可选的链接支持

VS 代码 > 输出 > 更漂亮

在一个新项目中:

VScode 使用 Workstation 版本 3.8.2(显示在左下栏中 TypeScript 3.8.2 ) Prettier v 2.2.2

0 投票
1 回答
84 浏览

swift - 关于 swift 中的可选链接的一个小问题

我在操场上运行这些代码,但出现编译错误

但它在下一行运行良好。这两者有什么区别?我什么时候应该使用“!” 明确的,什么时候不需要?

以下是代码:

0 投票
1 回答
400 浏览

typescript - 具有索引签名的接口的可选链接

我定义了两个接口。第一个有一个可选字段,第二个有一个索引签名:

为什么number | undefined当我使用可选链接访问属性时,第一个接口给我一个 type 的结果,而第二个接口只给我 type number

0 投票
1 回答
3606 浏览

javascript - 为什么 TypeScript 在可选链接运算符之后显示“无法调用可能是'未定义'.ts(2722)的对象”错误?

在这段居家期间,我决定深入研究 TypeScript,并开始通过实现一些基本的数据结构来实践它。我正在尝试实现一个使用自定义节点的自定义堆栈。

我的 StackNode 定义如下:

和实际的堆栈:

这里的问题是pop-method 中可选链接运算符的行this.top = this.top?.next()

我的理解是表达式this.top?.next()应该等同于

(this.top === null || this.top === undefined)? undefined : this.top.next()

但我仍然收到错误

无法调用可能是“未定义”的对象。ts(2722)

即使在那个阶段它不应该是未定义的,也可以在进行调用时。

为什么?我在这里想念什么?StackNode.nxt 和 Stack.top 都允许未定义。我试图以这样的旧方式做到这一点:

但我仍然得到同样的错误,即使在这里应该确保this.top不能未定义,但必须或至少应该是 StackNode 类型。

这应该是如何工作的,当从空堆栈弹出时,pop 方法将返回 undefined 并且当弹出最后一个元素时,它的下一个未定义的元素被设置为堆栈的顶部。

我正在使用 TS 3.8.3

0 投票
2 回答
3521 浏览

javascript - Expo Web 未能编译“可选链接”

看起来 Expo Webpack 没有可选链接

当我尝试将UI Kitten安装到 Expo Web 应用程序时,我发现了这一点。

这是我将 UI Kitten 添加到新创建的 Expo 应用程序后的编译错误

Deps 版本(目前我在这里写的最新版本。)

  • expo@37.0.6
  • @ui-kitten/components@5.0.0-alpha.1

有什么技巧可以解决这个问题吗?

0 投票
2 回答
856 浏览

javascript - 对象解构或可选链接哪个更好?

鉴于有两种编写代码的方式,就有效代码而言,哪种方式更好?

const { match: { params: { clientId = '' } } } = this.props;

const clientId = this.props?.match?.params?.clientId ?? ''

注意我们可以忽略任何中介都可能为空的事实。我的问题更具体的是为什么每个人都默认使用对象解构,当它可以像第二种格式一样简单地编写时

0 投票
0 回答
205 浏览

javascript - 使用 && 运算符,React 显示 0

我正在使用以下语句有条件地渲染组件。

{data?.length && <RenderThisComp />}

数据 - 一个数组。

RenderThisComp - 只有当数据数组有任何值时才需要渲染的组件。

如果data数组的长度为零,则它显示为零,而它不应该显示任何内容。

0 投票
1 回答
38 浏览

javascript - Javascript ES2020 中是否有等效的 optionalChaining?

众所周知,ES2020 支持 optionalChaining。例如,我们可以编写如下代码: let x = {a:{b:'c'}}; 控制台.log(x?.a?.b); 我们会得到'c'。

但是在某些情况下,我们可能想要使用像 x[a][b] 这样的表达式而不是 xab 我们可以使用像 x?[a]?[b] 这样的表达式来评估每个链接对象的验证吗?

0 投票
2 回答
3343 浏览

typescript - 带有 Typescript 3.8.3 的 Angular 9 是默认支持 IE 中的可选链接,而无需更改 polyfill (core-js)?

我们正在将我们的系统升级到 Angular 9.1.1,它具有 Typescript 3.8.3。@angular-devkit/build-angular@0.901.1 在下面使用 core-js@3.6.4。

我们想开始使用 Typescript 中的可选链接功能,而不是 lodash _.get,例如

但是,我们仍然需要支持 30% 的 IE 用户。有谁知道IE是否默认支持?如果没有,我们是否可以打开支持,例如在 polyfill.ts 中添加配置?我搜索了 core-js 并没有看到任何与可选链接相关的内容。

非常感谢!