【问题标题】:Use enum with TypeScript, with methods on each enumeration将枚举与 TypeScript 一起使用,每个枚举都有方法
【发布时间】:2017-12-08 14:21:07
【问题描述】:

我有这个 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

}

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

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

【问题讨论】:

    标签: node.js typescript enums typescript2.0


    【解决方案1】:

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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-01
    • 2021-10-21
    • 2011-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多