3

我有:

const fs = require('fs');

const packageConfig = JSON.parse(fs.readFileSync('./package.json'));
const { jspm: { configFile: jspmConfigFile }} = packageConfig;

但是packageConfig的值configFile可能是未定义的。在这种情况下,我想默认jspmConfigFile'config.js

是否可以在不创建扩展 packageConfig 对象的情况下做到这一点?

我意识到我可以做类似的事情:

const { jspm: { configFile: jspmConfigFile }} = _.extend({
    jspm: { config: 'config.js'}
}, packageConfig);

但这只是为了获得一个合理的解构默认值,这非常混乱。

我错过了什么?

4

2 回答 2

5

对象解构中默认值的语法是:

const { jspm: { configFile: jspmConfigFile = 'config.js' }} = packageConfig;

但这还没有在 Firefox 中实现:https ://bugzilla.mozilla.org/show_bug.cgi?id=932080

于 2015-10-04T20:10:01.057 回答
2

我不确定 ES2015 解构是否真的能在这里买到任何东西。归根结底,因为您只是在解构单个元素。您几乎正在编写一种奇特的方式:

const jspmConfigFile = packageConfig.jspm.configFile;

您可以在最里面的部分指定一个默认值,= 'defaultValue'但我不相信这实际上比它的 ES5|| 'default'版本更好。

作为旁注,您可以require在 Node 中使用 JSON 文件:

const jspmConfigFile = require("./package.json").jspm.configFile || "default";

是一个我认为更短的班轮。您也可以import直接在一个衬里中使用它:

import  { jspm: { configFile: jspmConfigFile = 'config.js' }} from "./package.json"

但老实说,我不认为这更清楚。

于 2015-10-04T20:11:40.360 回答