获取扩展对象的 TypeScript 代码补全
Get TypeScript code completion on extended objects
我的应用程序 conf.ts
有一个配置文件,它合并了来自其他文件的配置值,以使其井井有条。我合并它们,因为当我想使用配置值时,写 Conf.MY_LONG_NAMED_VALUE
比 Conf.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 不会自动完成配置名称在子类别中。
我找到的两个解决方案是,要么只使用一个文件 = 一个对象,这样组织性较差,要么创建一个包含所有配置名称的索引签名(或接口),这是工作量的两倍。
有没有更好的方法来完成这项工作?
您可以键入 Conf
作为您的配置之间的交集类型:
export const Conf: typeof CoreConf & typeof DebugConf & typeof ViewConf
或者您可以使用 Object.assign
类型 return 所有参数类型的交集类型
export const Conf = Object.assign({}, CoreConf, DebugConf, ViewConf)
在研究另一个问题时,我偶然发现了第三种解决方案——传播语法:
export const Conf = {...CoreConf, ...DebugConf, ...ViewConf}
对我来说,强制进行额外的 属性 检查对我来说是有益的,我希望在我的代码的另一部分中进行检查。
我的应用程序 conf.ts
有一个配置文件,它合并了来自其他文件的配置值,以使其井井有条。我合并它们,因为当我想使用配置值时,写 Conf.MY_LONG_NAMED_VALUE
比 Conf.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 不会自动完成配置名称在子类别中。
我找到的两个解决方案是,要么只使用一个文件 = 一个对象,这样组织性较差,要么创建一个包含所有配置名称的索引签名(或接口),这是工作量的两倍。
有没有更好的方法来完成这项工作?
您可以键入 Conf
作为您的配置之间的交集类型:
export const Conf: typeof CoreConf & typeof DebugConf & typeof ViewConf
或者您可以使用 Object.assign
类型 return 所有参数类型的交集类型
export const Conf = Object.assign({}, CoreConf, DebugConf, ViewConf)
在研究另一个问题时,我偶然发现了第三种解决方案——传播语法:
export const Conf = {...CoreConf, ...DebugConf, ...ViewConf}
对我来说,强制进行额外的 属性 检查对我来说是有益的,我希望在我的代码的另一部分中进行检查。