是否可以将参数的类型设置为 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(使用前将#替换为@)