使用全局名称声明枚举

时间:2015-08-20 21:30:46

标签: enums typescript

我有一个接受数字的Javascript函数。还有一些顶级常量:

var FOO = 1;
var BAR = 2;

只有使用其中一个常量调用此函数才有意义。

我想使用enum:

为这个函数创建一个类型安全的接口
declare enum MyType {
    FOO,
    BAR
}

interface MyClass {
    process(MyType type);
}

但此代码在js文件中输出MyType.FOO。我需要它只输出FOO但在typescript代码中仍然是类型安全的。有可能吗?

1 个答案:

答案 0 :(得分:2)

// Version A
const enum _MyType {
    FOO,
    BAR
}
let FOO = _MyType.FOO;
let BAR = _MyType.BAR;

// Version B (if FOO and BAR come from another file)
declare const enum _MyType {
    FOO,
    BAR
}
declare let FOO: _MyType;
declare let BAR: _MyType;

无论哪种方式,

function fn(x: _MyType) { /* ... */ }

fn(FOO); // OK
fn('quack'); // Error