TypeScript:扩展导入的枚举

时间:2017-01-30 16:04:32

标签: typescript enums

我可以在单个文件中合并枚举声明,例如

export enum Test {
  value1 = <any>'value1',
  value2 = <any>'value2'
}

export enum Test {
  value3 = <any>'value3'
}

这很好用,但我的意图是有一个共享的枚举,我可以在以后扩展,例如

// test.enum.ts
export enum Test {
  value1 = <any>'value1',
  value2 = <any>'value2'
}

// place-to-extend-enum.ts
import { Test } from './test.enum';

export enum Test {
  value3 = <any>'value3'
}

我得到的是

  

合并声明'Test'中的个别声明必须全部   出口或所有当地。

有没有办法达到预期的行为?

3 个答案:

答案 0 :(得分:13)

参考https://github.com/Microsoft/TypeScript/pull/6213,您可以这样做:

{{1}}

... 魔法! ;)

答案 1 :(得分:5)

我看到了一种可以在现有枚举中添加其他功能/方法的方法。这是通过在类似于枚举类型的命名空间中创建函数:这里

enum Weekday {
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday,
    Sunday
}
namespace Weekday {
    export function isBusinessDay(day: Weekday) {
        switch (day) {
            case Weekday.Saturday:
            case Weekday.Sunday:
                return false;
            default:
                return true;
        }
    }
}

const mon = Weekday.Monday;
const sun = Weekday.Sunday;
console.log(Weekday.isBusinessDay(mon)); // true
console.log(Weekday.isBusinessDay(sun)); // false

您可以在“{静态功能枚举”

部分https://basarat.gitbooks.io/typescript/docs/enums.html查看完整信息

答案 2 :(得分:1)

经过一些研究后,我必须承认我找不到一种超级正确的方法来做到这一点。

但是有两种可能的解决方案并不是那么糟糕而且不会那么臭。

首先是实现自定义枚举 - 这种方式不允许使用现有的枚举。这可能是此方法的唯一限制。除此之外,它看起来简单而且很原生。

另一种方法是[使用单独的类型声明将枚举合并到一个值中]。这种方式允许使用已存在的真实的枚举;但是它使用起来不太舒服,因为有两个实体需要注意:枚举值和枚举类型。