枚举作为 TypeScript 中的参数

2024-03-23

是否可以将参数的类型设置为 Enum?像这样:

private getRandomElementOfEnum(e : enum):string{
    var length:number = Object.keys(e).length;
    return e[Math.floor((Math.random() * length)+1)];
}

抛出以下错误:

预期参数表达式。(1135)

With any显然一切都好:

private getRandomElementOfEnum(e : any):string{
    var length:number = Object.keys(e).length;
    return e[Math.floor((Math.random() * length)+1)];
}

是否有可能或有一些解决方法将枚举定义为参数?


无法确保参数是枚举,因为 TS 中的枚举不继承自共同的祖先或接口。

TypeScript 带来静态分析。您的代码使用动态编程Object.keys and e[dynamicKey]。对于动态代码,类型any很方便。

你的代码有问题:length()不存在,e[Math.floor((Math.random() * length)+1)]返回一个字符串或一个整数,并且枚举值可以手动设置 http://www.typescriptlang.org/Handbook#basic-types-enum

这是一个建议:

function getRandomElementOfEnum<E>(e: any): E {
    var keys = Object.keys(e),
        index = Math.floor(Math.random() * keys.length),
        k = keys[index];
    if (typeof e[k] === 'number')
        return <any>e[k];
    return <any>parseInt(k, 10);
}

function display(a: Color) {
    console.log(a);
}

enum Color { Blue, Green };
display(getRandomElementOfEnum<Color>(Color));

理想情况下,参数类型any应替换为typeof E但编译器(TS 1.5)无法理解这种语法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

枚举作为 TypeScript 中的参数 的相关文章

随机推荐