Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用带有泛型的枚举键的typescript_Typescript_Enums_Typescript Typings_Typescript Generics - Fatal编程技术网

使用带有泛型的枚举键的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” 我们如何制作一个通用的计数器接口,用

我想创建一个错误代码计数器,但在使用枚举和泛型的typescript方面存在问题

这是工作版本(没有泛型)

枚举错误代码{
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