在扩展对象上获取TypeScript代码完成

时间:2018-02-16 06:25:01

标签: javascript jquery typescript webstorm

我有一个我的应用conf.ts的配置文件,该文件合并来自其他文件的配置值,以保持其有序。我合并它们,因为当我想使用配置值时,写Conf.MY_LONG_NAMED_VALUEConf.SubCategory.MY_LONG_NAMED_VALUE更容易

import {CoreConf} from './conf/game/core.conf';
import {ViewConf} from './conf/view/view.conf';
import {DebugConf} from './conf/game/debug.conf';

/**
 *
 * @namespace Conf
 */
export const Conf: {[index: string] : any} = $.extend({},
    CoreConf,
    DebugConf,
    ViewConf
);

我目前正在从JavaScript迁移到TypeScript,虽然WebStorm中的JavaScript代码完成工作(由于JSDoc标记@namespace),但TypeScript不会自动完成子类别中的配置名称。

我发现的两个解决方案是要么只使用一个文件=一个对象组织较少,要么创建一个带有所有配置名称的索引签名(或接口),这是工作的两倍。 / p>

有没有更好的方法让这项工作?

2 个答案:

答案 0 :(得分:2)

您可以键入Conf作为您的配置之间的交集类型:

export const Conf: typeof CoreConf & typeof DebugConf & typeof ViewConf 

或者您可以使用键入的Object.assign来返回所有参数类型的交集类型

export const Conf = Object.assign({}, CoreConf, DebugConf, ViewConf)

答案 1 :(得分:0)

在研究不同的问题时,我偶然发现了第三种解决方案 - 扩展语法:

export const Conf = {...CoreConf, ...DebugConf, ...ViewConf}

对我来说,这可以通过强制进行超额财产检查而受益,我希望在我的代码的另一部分中使用。