作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Helo Stack 社区,
我有以下 enum
映射类:
export class RestEnumMpapper<T> {
constructor() {}
getEnumAsString<T>(o: T, key: string | number): string {
if (typeof key === 'string') {
return (o as T)[(o as T)[key]];
} else if (typeof key === 'number') {
return (o as T)[key];
} else {
throw new Error(`Unable to parse enum from ${typeof(key)}`);
}
}
/* ... Rest of enum converting class code ... */
}
export class PositionEvent {
private static statusEnumMapper: RestEnumMpapper<EventState> = new RestEnumMpapper<EventState>();
/* ... */
this.status = PositionEvent.statusEnumMapper.getEnumAsString(EventState, iPos.status) as EventState;
}
T
在
RestEnumMpapper
在这里上课:
export class RestEnumMpapper<T> {
getEnumAsString<T>(o: T, key: string | number): string {
T
关于每次调用的函数声明,我都在关注
TypeScritp
错误:
[ts] Argument of type 'typeof EventState' is not assignable to parameter of type 'EventState'.
2[3]
这样的语句时,函数显然失败了。 .
最佳答案
发生这种情况是因为您没有将枚举的值传递给函数,该函数的类型为 EventState
而是包含类型为 typof EventState
的枚举的对象.所以从方法中删除类型参数,但传入 typeof EventState
到类(class)应该可以正常工作:
let statusEnumMapper = new RestEnumMpapper<typeof EventState>();
T
允许在不强制转换的情况下进行索引:
export class RestEnumMpapper<T extends { [name: string]: any }> {
constructor(public enumObject: T) { }
getEnumAsString(key: string | number): string {
if (typeof key === 'string') {
return this.enumObject[this.enumObject[key]];
} else if (typeof key === 'number') {
return this.enumObject[key];
} else {
throw new Error(`Unable to parse enum from ${typeof (key)}`);
}
}
/* ... Rest of enum converting class code ... */
}
enum EventState {
Test = "Test",
One = "One",
}
let statusEnumMapper = new RestEnumMpapper(EventState);
let statusStr = "One";
let status = statusEnumMapper.getEnumAsString(statusStr) as EventState;
关于 typescript 枚举通用映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51131365/
我是一名优秀的程序员,十分优秀!