TypeScript 中的可选链操作符

33

在JavaScript中,Optional Chaining运算符由Babel插件支持。

但我找不到如何在TypeScript中实现这一点。有什么想法吗?


TypeScript不支持可选链操作符。 - mirvatJ
2
(((some || {}).variable || {}).access || {}).nested(((一些 || {}).变量 || {}).访问 || {}).嵌套 - Jonas Wilms
可选链现在处于第二阶段!因此它更有可能被添加到JavaScript和TypeScript中。 - HosseinAgha
3个回答

20

截至撰写本文时,TypeScript不支持可选链接运算符。请参见TypeScript问题追踪器上的讨论:https://github.com/Microsoft/TypeScript/issues/16

需要提醒的是,此运算符的语义仍然非常不稳定,这就是为什么TypeScript尚未添加它的原因。今天编写的代码可能会在未来发生行为变化而没有警告,从而导致难以解决的错误。我通常建议人们不要开始使用尚未定义行为的语法。


请参见以下链接获取有关可选链提案的示例:https://github.com/tc39/proposal-optional-chaining/issues/51,https://github.com/tc39/proposal-optional-chaining/issues/3,https://github.com/tc39/proposal-optional-chaining/issues/65。 - Ryan Cavanaugh
2
一年后,有什么新消息吗? - Daniel Santos
3
TC39委员会仍在就语法和行为进行讨论。 - Ryan Cavanaugh
1
我在这里提一下,以防你感兴趣——现在有一些实用的函数试图提供类型安全的替代方案,比如typesafe-getoptional-chain和(我的)get-optional。当然,它们都不是本地支持的运算符,但它们仍然可能会有所帮助。 - noppa
1
你必须考虑这种情况:“哦,我们所有的运行时都支持我们使用的所有语法特性,所以我们可以关闭向下级别转换”,但最终你得到了不同的行为。 - Ryan Cavanaugh
显示剩余3条评论

12

2019年10月15日更新

现在 typescript@3.7.0-beta 中支持此操作符。

感谢https://dev59.com/AVcO5IYBdhLWcg3waw-o#58221278的更新!


虽然 TypeScript 和社区都支持这个操作符,但在 TC39 确定了当前提案(目前写作时处于stage 1),我们将不得不使用替代方案。

有一个替代方案可以接近可选链而不损失开发工具https://github.com/rimeto/ts-optchain

这篇文章 记录了创建者尝试模拟本地链接运算符所能实现的内容:

  1. 使用语法与链接属性访问相似
  2. 为遍历失败提供简洁的默认值表达式
  3. 启用 IDE 代码补全工具和编译时路径验证

实际上是这样的:

import { oc } from 'ts-optchain';

// Each of the following pairs are equivalent in result.
oc(x).a();
x && x.a;

oc(x).b.d('Default');
x && x.b && x.b.d || 'Default';

oc(x).c[100].u.v(1234);
x && x.c && x.c[100] && x.c[100].u && x.c[100].u.v || 1234;

请记住,一旦TypeScript采用了这个提案,像这样的替代品可能就不再需要了。

此外,对于在TC39倡导这个操作符的所有工作,特别感谢Ryan Cavanaugh


如果您想修复使用TypeScript的VS Code Linting,可以在settings.json中指向一个TypeScript v >= 3.7.0-beta,方法是添加以下代码:"typescript.tsdk": "${npm global dir}/lib/node_modules/typescript/lib" - protoEvangelion

6

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接