在JavaScript中,Optional Chaining运算符由Babel插件支持。
但我找不到如何在TypeScript中实现这一点。有什么想法吗?
在JavaScript中,Optional Chaining运算符由Babel插件支持。
但我找不到如何在TypeScript中实现这一点。有什么想法吗?
截至撰写本文时,TypeScript不支持可选链接运算符。请参见TypeScript问题追踪器上的讨论:https://github.com/Microsoft/TypeScript/issues/16
需要提醒的是,此运算符的语义仍然非常不稳定,这就是为什么TypeScript尚未添加它的原因。今天编写的代码可能会在未来发生行为变化而没有警告,从而导致难以解决的错误。我通常建议人们不要开始使用尚未定义行为的语法。
现在 typescript@3.7.0-beta
中支持此操作符。
感谢https://dev59.com/AVcO5IYBdhLWcg3waw-o#58221278的更新!
虽然 TypeScript 和社区都支持这个操作符,但在 TC39 确定了当前提案(目前写作时处于stage 1
),我们将不得不使用替代方案。
有一个替代方案可以接近可选链而不损失开发工具:https://github.com/rimeto/ts-optchain
这篇文章 记录了创建者尝试模拟本地链接运算符所能实现的内容:
- 使用语法与链接属性访问相似
- 为遍历失败提供简洁的默认值表达式
- 启用 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!
settings.json
中指向一个TypeScript v >= 3.7.0-beta,方法是添加以下代码:"typescript.tsdk": "${npm global dir}/lib/node_modules/typescript/lib"
。 - protoEvangelion