使用带有泛型的枚举键的typescript
我想创建一个错误代码计数器,但在使用枚举和泛型的typescript方面存在问题 这是工作版本(没有泛型)使用带有泛型的枚举键的typescript,typescript,enums,typescript-typings,typescript-generics,Typescript,Enums,Typescript Typings,Typescript Generics,我想创建一个错误代码计数器,但在使用枚举和泛型的typescript方面存在问题 这是工作版本(没有泛型) 枚举错误代码{ MX1=‘MX1’, MX2='MX2' } 类型代码=错误代码类型的键; 类型ErrorCodeCounter={ [代码中的代码]:编号 } 常量计数器={} 计数器[ErrorCode.MX1]=3 计数器['randomCode']=3//有效的TS错误:“ErrorCodeCounter”类型上不存在“randomCode” 我们如何制作一个通用的计数器接口,用
枚举错误代码{
MX1=‘MX1’,
MX2='MX2'
}
类型代码=错误代码类型的键;
类型ErrorCodeCounter={
[代码中的代码]:编号
}
常量计数器={}
计数器[ErrorCode.MX1]=3
计数器['randomCode']=3//有效的TS错误:“ErrorCodeCounter”类型上不存在“randomCode”
我们如何制作一个通用的计数器接口,用作:
const counter = <Counter<ErrorCode>>{}
counter[ErrorCode.MX1] = 3
const计数器={}
计数器[ErrorCode.MX1]=3
我想到的一个方法是
type Counter<T> = {
[code in keyof T] : number
}
类型计数器={
[键入T的代码]:编号
}
但这是行不通的。
有没有关于如何制作通用版本的想法
注意用接口替换枚举是可行的,但我更喜欢枚举而不是接口
interface ErrorCodeI {
MS1: string;
MS2: string;
}
type Counter<T> = {
[code in keyof T] : number
}
const counter = <Counter<ErrorCodeI>>{}
counter['MS1'] = 3
counter['random'] = 3 // Valid TS error.
接口错误代码i{
MS1:字符串;
MS2:字符串;
}
类型计数器={
[键入T的代码]:编号
}
常量计数器={}
计数器['MS1']=3
计数器['random']=3//有效TS错误。
您不需要keyof
,枚举类型本身已经是要映射的枚举元素的并集:
type Counter<T extends PropertyKey> = {
[code in T] : number
}
enum ErrorCode {
MX1 = 'MX1',
MX2 = 'MX2'
}
const counter = <Counter<ErrorCode>>{}
counter[ErrorCode.MX1] = 3
counter['randomCode'] = 3 //ERR
类型计数器={
[T中的代码]:编号
}
枚举错误代码{
MX1=‘MX1’,
MX2='MX2'
}
常量计数器={}
计数器[ErrorCode.MX1]=3
计数器['randomCode']=3//错误
这太好了。不知道PropertyKey,在文档中找不到。如果您知道的话,请与我们分享更多关于这方面的资源。谢谢
type Counter<T extends PropertyKey> = {
[code in T] : number
}
enum ErrorCode {
MX1 = 'MX1',
MX2 = 'MX2'
}
const counter = <Counter<ErrorCode>>{}
counter[ErrorCode.MX1] = 3
counter['randomCode'] = 3 //ERR