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

时间:2017-08-23 15:20:03

标签: javascript typescript optional chaining

在javascript中,babel plugin支持可选链接运算符。

但我无法在Typescript中找到如何做到这一点。有什么想法吗?

3 个答案:

答案 0 :(得分:21)

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

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

答案 1 :(得分:4)

Typescript 3.7 beta has now support for Optional chaining??

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

let x = foo?.bar?.baz;

答案 2 :(得分:3)

尽管TypeScript和社区都赞成使用此运算符,但是直到TC39巩固current proposal(在撰写本文时为stage 1),我们将拥有使用替代品。

有一种选择可以在不牺牲开发工具的情况下接近可选链接https://github.com/rimeto/ts-optchain

This article记载了创建者在尝试镜像本机链接运算符时能够实现的目标:

  
      
  1. 使用与链接的属性访问密切相关的语法
  2.   
  3. 遍历失败时提供默认值的简洁表达式
  4.   
  5. 启用IDE代码完成工具和编译时路径验证
  6.   

在实践中,它看起来像这样:

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采用,就可能不需要这种替代方案。

也非常感谢Ryan Cavanaugh为使该操作员加入TC39而所做的所有工作!