我的 TypeScript 项目是模块化的,并且有几个配置文件。我为配置文件选择了TOML,因为它是一种非常直观的语言。
另外,我有一个main.toml
可以启用/禁用模块的地方。我的配置类看起来像这样。它是为从中创建多个自动解析的配置而设计的。
import { parse } from 'toml';
import { readFileSync } from 'fs';
import { join } from 'path';
export class Config {
private readonly _name: string;
private readonly _path: string;
private _config: object;
constructor(name: string) {
this._name = name;
this._path = join(__dirname, '..', '..', 'config', `${name}.toml`);
this._config = this.load();
}
public load(): object {
let config: object = {};
try {
config = parse(readFileSync(this._path).toString());
} catch (error) {
if (error.code === 'ENOENT') {
throw new Error(`config ${this._name}.toml was not found!`);
} else {
throw new Error(error);
}
}
return config;
}
get config(): object {
return this._config;
}
}
这是我的主文件在我想要使用main.toml
激活其他模块的位置的样子:
import { Config } from './init/config';
let config: object = {};
try {
config = new Config('main').config;
} catch (error) {
console.log(error.stack);
process.exit(1);
}
for (const key in config.modules) {
if (Object.prototype.hasOwnProperty.call(config.modules, key) && config.modules[key]) {
require(`./modules/${key}/${key}`);
} else {
zoya.info(`skipping module ${key}...`);
}
}
现在我遇到的问题是打字稿编译器每次使用时都会给我以下错误config.modules
:
TS2339: Property 'modules' does not exist on type 'object'.
顺便说一句,我可以压制它,@ts-ignore
但我认为这是一些不好的做法,我想知道我是否能以某种方式阻止这种情况。
我还尝试了其他类似的 TOML 解析器,我希望它会有所作为,但我遇到了完全相同的问题。