网站搜索

node.js - 在 JavaScript 中可选链的最佳替代方案


我有以下链式操作符

const age = data.student?.age ? data.student.age: '';

这在我的本地机器上运行正常,但在另一台机器上似乎有问题。经过进一步调查,我了解到 Node.js 较低版本(我猜低于 12 版本)不支持链式运算符。我知道我可以像下面这样用 if 条件来替代,但我想了解对于这个问题最好的可能替代方案是什么。

function checkAge(data){
  if(data && data.student && data.student.age) {
    return data.student.age;
  } else {
   return '';
  }
}


const age  = checkAge(data);

答案#1

无需修改代码。您只需要在您的 TypeScript 配置中修改 target 选项,并将其设置为 ES2019 或更低版本。然后您可以在 TypeScript 代码中使用可选链,编译器将生成等效的代码。

TypeScript 代码

const foo = a?.b?.c;

变成

"use strict";
var _a;
const foo = (_a = a === null || a === void 0 ? void 0 : a.b) === null || _a === void 0 ? void 0 : _a.c;

编译后:Playground 链接

答案#2

如果问题是可读性,你可能可以尝试对象解构。所以,你的赋值可能看起来像这样:

const {
  student: {
    age = ''
  } = {}
} = data