2017-07-05 98 views
1

我有这个打字稿文件的方法:使用枚举与打字稿,对每个枚举

export type TSumanToString =() => string; 

export interface ISumanEvent { 
    explanation: string, 
    toString: TSumanToString 
} 

export interface ISumanEvents{ 
    [key: string]: ISumanEvent 
} 

export const events: ISumanEvents = Object.freeze({ 

    // runner events 
    TEST_FILE_CHILD_PROCESS_EXITED: { 
    explanation: 'runner is started, fires before any test child processes are started.', 
    toString: makeToString('TEST_FILE_CHILD_PROCESS_EXITED') 
    }, 

    RUNNER_EXIT_CODE: { 
    explanation: 'runner is started, fires before any test child processes are started.', 
    toString: makeToString('RUNNER_EXIT_CODE') 
    }, 

    RUNNER_EXIT_SIGNAL: { 
    explanation: 'runner is started, fires before any test child processes are started.', 
    toString: makeToString('RUNNER_EXIT_SIGNAL') 
    }, 

    RUNNER_HIT_DIRECTORY_BUT_NOT_RECURSIVE: { 
    explanation: 'runner is started, fires before any test child processes are started.', 
    toString: makeToString('RUNNER_HIT_DIRECTORY_BUT_NOT_RECURSIVE') 
    }, 

    RUNNER_EXIT_CODE_IS_ZERO: { 
    explanation: 'runner is started, fires before any test child processes are started.', 
    toString: makeToString('RUNNER_EXIT_CODE_IS_ZERO') 
    }, 

    RUNNER_TEST_PATHS_CONFIRMATION: { 
    explanation: 'runner is started, fires before any test child processes are started.', 
    toString: makeToString('RUNNER_TEST_PATHS_CONFIRMATION') 
    }, 

    // there are a lot more entries 

}) 

这就产生了一个.d.ts文件中像这样:

export declare type TSumanToString =() => string; 
export interface ISumanEvent { 
    explanation: string; 
    toString: TSumanToString; 
} 
export interface ISumanEvents { 
    [key: string]: ISumanEvent; 
} 
export declare const events: ISumanEvents; 

,但我需要包括各财产作为一个常数或枚举。我可以使用一个界面来做到这一点,但这需要我复制一切,这似乎是一种浪费。

换句话说,我不想要做到这一点,因为这只是重复什么在我的常量,这是一种浪费,而且容易成为出不同步:

export interface ISumanEvents { 

    TEST_FILE_CHILD_PROCESS_EXITED: ISumanEvent, 
    RUNNER_EXIT_CODE: ISumanEvent, 
    RUNNER_EXIT_SIGNAL: ISumanEvent, 
    RUNNER_HIT_DIRECTORY_BUT_NOT_RECURSIVE: ISumanEvent; 
    RUNNER_EXIT_CODE_IS_ZERO: ISumanEvent, 
    RUNNER_TEST_PATHS_CONFIRMATION: ISumanEvent 

} 

有没有办法创建一个枚举,以便我不必创建一个只重复实际对象中所有内容的接口?

问题是我不知道如何在enum上定义方法。

回答