打字稿中的可选链接运算符

cwt*_*uan 30 javascript optional chaining typescript

在javascript中,babel插件支持Optional Chaining Operator .

但我无法在Typescript中找到如何做到这一点.任何的想法?

Rya*_*ugh 20

在撰写本文时,TypeScript不支持可选的链接运算符.请参阅有关TypeScript问题跟踪器的讨论:https://github.com/Microsoft/TypeScript/issues/16

作为警告,此运算符的语义仍然非常不稳定,这就是TypeScript尚未添加它的原因.今天针对Babel插件编写的代码可能在未经警告的情况下改变将来的行为,从而导致难以处理的错误.我通常建议人们不要开始使用其行为尚未明确定义的语法.

  • TC39委员会仍在*争论语法和行为 (3认同)
  • 一年后有什么消息吗? (2认同)

pro*_*ion 9

更新2019年10月15日

现在存在支持 typescript@3.7.0-beta

/sf/answers/4075489491/表示感谢!


尽管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;
Run Code Online (Sandbox Code Playgroud)

请记住,一旦TypeScript通过了该提议,则可能不需要这种替代方案。

另外,非常感谢Ryan Cavanaugh在提倡该操作员使用TC39方面所做的所有工作!


Jos*_*ado 5

Typescript 3.7 beta 现在支持可选链

您现在可以编写如下代码:

let x = foo?.bar?.baz;
Run Code Online (Sandbox Code Playgroud)