Javascript 为什么“导出默认值”用“默认值”而不是对象本身导出对象?

Javascript 为什么“导出默认值”用“默认值”而不是对象本身导出对象?,javascript,typescript,Javascript,Typescript,所以我有三个Typescript文件: config/env/development.ts 从“../Config”导入{Config}; 类DevConfig{ 公共配置:配置={ 主机:“localhost”, 端口:8080 }; 构造函数(){ this.config.HOST='localhost'; this.config.PORT=(process.env.PORT与number一样未知)| | 8080; } } 导出默认的新DevConfig().config; config

所以我有三个Typescript文件:

config/env/development.ts

从“../Config”导入{Config};
类DevConfig{
公共配置:配置={
主机:“localhost”,
端口:8080
};
构造函数(){
this.config.HOST='localhost';
this.config.PORT=(process.env.PORT与number一样未知)| | 8080;
}
}
导出默认的新DevConfig().config;
config/index.ts

从“/Config”导入{Config};
process.env.NODE_env=process.env.NODE|env | |“开发”;
类AppConfig{
public-allConfig:Config;
public-envConfig:Config;
构造函数(){
this.envConfig=require(`${uuuuu dirname}/env/${process.env.NODE\u env}.js`);
this.allConfig=require(`${uu dirname}/all.js`);
}
}
导出默认的新AppConfig().envConfig;
另一个文件是: /附件ts

从“express”导入*为express;
从“./controllers/status”导入{hi};
从“/config”导入AppConfig;
类应用程序{
公共快递:任何;
公共配置:对象;
构造函数(){
this.express=express();
this.config=AppConfig;
这是mountsroutes();
log(`Output test:${JSON.stringify(this.config,null,4)}`);
}
私人山路(){
const router=express.router();
router.get('/',hi);
this.express.use(“/”,router);
}
}
导出默认的新应用程序();
运行此命令时看到的输出如下所示:

输出测试:{ “默认值”:{ “主机”:“本地主机”, “端口”:8080 } }


“默认”从何而来?如果我尝试执行
console.log(this.config.PORT),我得到一个未定义的
。有人能澄清一下吗?

一个模块可以有一个
默认导出
和常规的
导出
s,但是
require()
只能返回一个值。因此,您使用的transpiler必须将多个导出转换为一个值。它通过将所有导出转换为一个对象来实现

  // this
  export default 1;
  export const named = 2;

  // turns into:
  module.exports = { 
    default: 1,
    named: 2 
  };
由于
default
是保留关键字,因此不能用作命名导出,因此为
export default
设置
default
键非常有意义


您可以使用
require(“…”)轻松获得默认导出。默认值

那么,
{“主机”:“本地主机”,“端口”:8080}
来自哪里?您不应该这样做。使用。那么
需要的文件是否有默认导出?请发布它的内容,它看起来非常相关(比你发布的第二个文件要重要得多)。你就在这里,这就是
default
的来源。请看一看Typescript编译器正在生成的代码。@codehitman由于您仍然只想导出对象(?),我怀疑您是否需要对类实例执行任何操作的方法。只需编写简单的
函数
声明。如果您想用方法导出对象,也可以用对象文本编写方法定义:-)…或者只编写
module.exports={HOST:“localhost”,PORT:process.env.PORT | 8080}而不是过度设计的typescript内容:-)“为导出默认设置一个
default
键非常有意义。”-这不仅仅是因为
default
是一个保留关键字,而是默认导出实际上只是一个普通的导出,带有一个特殊的标识符,可以保存一些键入。您也可以使用“命名”语法导出和导入is。我正要提到json配置,但使用
process.env
需要一个脚本。