簡體   English   中英

在擴展對象上獲取TypeScript代碼完成

[英]Get TypeScript code completion on extended objects

我為我的應用程序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不會自動完成子類別中的配置名稱。

我發現的兩個解決方案是要么僅使用一個文件=一個對象,但對象的組織性較差,要么使用所有配置名稱創建索引簽名(或接口),這是工作的兩倍。

有沒有更好的方法可以使這項工作?

您可以輸入Conf作為配置之間的交集類型:

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

或者,您可以使用Object.assign鍵入返回所有參數類型的交集類型

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

在研究另一個問題時,我偶然發現了第三個解決方案-傳播語法:

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

對我來說,這通過強制執行“多余的屬性檢查”而受益,這是我在代碼的另一部分中想要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM