所以我有三个Typescript文件:
config / env / development.ts
import { Config } from '../config';
class DevConfig {
public config : Config = {
HOST: 'localhost',
PORT: 8080
};
constructor() {
this.config.HOST = 'localhost';
this.config.PORT = (process.env.PORT as unknown as number) || 8080;
}
}
export default new DevConfig().config;
config / index.ts
import { Config } from './config';
process.env.NODE_ENV = process.env.NODE_ENV || 'development';
class AppConfig {
public allConfig : Config;
public envConfig : Config;
constructor() {
this.envConfig = require(`${__dirname}/env/${process.env.NODE_ENV}.js`);
this.allConfig = require(`${__dirname}/all.js`);
}
}
export default new AppConfig().envConfig;
,另一个文件是: ./app.ts
import * as express from 'express';
import { hi } from './controllers/status';
import AppConfig from './config';
class App {
public express: any;
public config: object;
constructor() {
this.express = express();
this.config = AppConfig;
this.mountRoutes();
console.log(`Output test: ${JSON.stringify(this.config, null, 4)}`);
}
private mountRoutes() {
const router = express.Router();
router.get('/', hi);
this.express.use('/', router);
}
}
export default new App();
运行此命令时看到的输出如下:
输出测试:{ “默认”:{ “ HOST”:“本地主机”, “端口”:8080 } }
“默认”来自哪里?如果我尝试做console.log(this.config.PORT);
,则会得到undefined
。有人可以澄清一下吗?
答案 0 :(得分:1)
一个模块可以有一个default export
和常规export
,而require()
只能返回一个值。因此,您使用的编译器必须将多个导出转换为一个值。它通过将所有导出变成一个对象来实现。
// this
export default 1;
export const named = 2;
// turns into:
module.exports = {
default: 1,
named: 2
};
由于default
是保留关键字,因此不能用作命名导出,因此,为default
设置一个export default
键是很有意义的。
您可以使用require("...").default
轻松获得默认导出。