Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Typescript中的可选链接运算符_Javascript_Typescript_Optional_Chaining - Fatal编程技术网

Javascript Typescript中的可选链接运算符

Javascript Typescript中的可选链接运算符,javascript,typescript,optional,chaining,Javascript,Typescript,Optional,Chaining,在javascript中,可选的链接运算符受支持 但我找不到如何在Typescript中实现这一点。有什么想法吗?在撰写本文时,TypeScript不支持可选的链接运算符。请参阅关于TypeScript问题跟踪器的讨论: 作为警告,这个操作符的语义仍然在不断变化,这就是为什么TypeScript还没有添加它的原因。今天针对Babel插件编写的代码将来可能会在没有警告的情况下改变行为,从而导致难以解决的bug。我通常建议人们不要开始使用行为尚未明确定义的语法。2019年10月15日更新 支持现在存

在javascript中,可选的链接运算符受支持


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

在撰写本文时,TypeScript不支持可选的链接运算符。请参阅关于TypeScript问题跟踪器的讨论:

作为警告,这个操作符的语义仍然在不断变化,这就是为什么TypeScript还没有添加它的原因。今天针对Babel插件编写的代码将来可能会在没有警告的情况下改变行为,从而导致难以解决的bug。我通常建议人们不要开始使用行为尚未明确定义的语法。

2019年10月15日更新 支持现在存在于
typescript@3.7.0-测试版

感谢您的更新


尽管TypeScript和社区都支持该运算符,但在TC39固化该运算符之前(撰写本文时,该运算符处于
阶段1
),我们将不得不使用其他运算符

有一种替代方法可以在不牺牲开发工具的情况下接近可选链接:

记录创作者在尝试镜像本地链接运营商时能够实现的功能:

  • 使用紧密镜像链接属性访问的语法
  • 当遍历失败时,提供默认值的简明表达式
  • 启用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推荐该操作员所做的所有工作

    TypeScript不支持可选的链接运算符(((某些| |{})。变量| |{})。访问| |{})。嵌套现在处于第2阶段!因此,它更有可能被添加到javascript中,并最终被添加到typescript中。很抱歉,但我真的很好奇,“user.address?.street”之类的语法在这一点上究竟会发生什么变化?在检查街道之前,检查地址是否为空的句点之前有一个问号。当然,一些幕后代码可能会改变,但对于实现这一点的用户来说,会出现什么问题?无意冒犯,一年后,我真的很好奇有什么消息吗?TC39委员会仍在争论语法和行为问题。如果您感兴趣,我只在这里提及一些实用程序函数,它们现在试图提供一个类型安全的替代方案,如和(我的)。当然,它们没有一个是与本地支持的操作符相同的,但是它们还是可以帮助的。你必须考虑这样的情况:你说,“哦,我们所有的运行时都支持我们使用的所有语法特征,所以我们可以关闭降阶”。如果您想修复使用typescript的VS代码linting,请在settings.json中用“typescript.tsdk”指向typescript v>=3.7.0-beta“${npm global dir}/lib/node\u modules/typescript/lib”