在TypeScript中使用枚举,并在每个枚举上使用方法

我有这个TypeScript文件:

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; 

但我需要包括事件的每个属性作为一个常量或枚举。 我可以使用一个界面来做到这一点,但这需要我复制一切,这似乎是一种浪费。

换句话说,我不想这样做,因为这只是简单地复制了const中的内容,这很浪费,很容易变得不同步:

 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 } 

有没有办法创build一个枚举,所以我不必创build一个接口,只复制实际对象中的所有东西?

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

是否有一个原因,你不能使用内置的Typescript枚举?

http://www.typescriptlang.org/docs/handbook/enums.html