TypeScript-如何在TypeScript中省略枚举中的某些项?

TypeScript-如何在TypeScript中省略枚举中的某些项?,typescript,Typescript,我定义了一个枚举以澄清API请求状态: const enum Errcode{ Ok=0, Error=1, AccessDeny=201, PostsNotFound=202, TagNotFound=203, //... } type SuccessErrcode =Errcode.Ok; type NotFoundError =Errcode.PostsNotFound|Errcode.TagNotFound; type ErrorErrc

我定义了一个枚举以澄清API请求状态:

const enum Errcode{
    Ok=0,
    Error=1,
    AccessDeny=201,
    PostsNotFound=202,
    TagNotFound=203,
    //...
}

type SuccessErrcode =Errcode.Ok;
type NotFoundError =Errcode.PostsNotFound|Errcode.TagNotFound;
type ErrorErrcode=/* there */;
我如何定义
errorrCode
,这意味着除了Errcode.Ok之外的所有Errcode项(它应该包括NotFoundError的所有项)

我无法定义更细粒度的类型,它们是这样的:

enum SuccessErrcode {
    Ok =0,
}
enum NotFoundErrcode {
    PostsNotFound=202,
    TagNotFound=203,
}
enum ErrorErrcode {
    Error=1,
}
type Errcode =SuccessErrcode|NotFoundError|SuccessErrcode;

如果我这样做,我将无法使用
Errcode.xxx
-要使用代码,我必须知道它的分配位置。(例如,从
Errcode.TagNotFound
NotFoundError.TagNotFound
)。并考虑-当有< TagErrcode > <代码>和<代码> NotFoundErrcode <代码>时,<代码> TAGNOTSEND= 203 将被定义两次。

< p>您将首先定义更细粒度的类型。也许是这样的:

enum ErrorCode {
    Error = 1,
    AccessDeny = 201,
    PostsNotFound = 202,
    TagNotFound = 203,
}

enum SuccessCode {
    Ok = 0
}
const myResult1: ResultCode = ErrorCode.AccessDeny;
const myResult2: ResultCode = SuccessCode.Ok;
然后,您可以将定义为
SuccessCode
ErrorCode

type ResultCode = ErrorCode | SuccessCode;
然后您可以这样使用:

enum ErrorCode {
    Error = 1,
    AccessDeny = 201,
    PostsNotFound = 202,
    TagNotFound = 203,
}

enum SuccessCode {
    Ok = 0
}
const myResult1: ResultCode = ErrorCode.AccessDeny;
const myResult2: ResultCode = SuccessCode.Ok;

从TypeScript 2.8和添加条件类型开始,您可以使用内置的
Exclude
排除某些枚举值:

const enum Errcode{
Ok=0,
错误=1,
AccessDeny=201,
PostsNotFound=202,
TagNotFound=203,
//...
}
键入SuccessErrcode=Errcode.Ok;
键入NotFoundError=Errcode.PostsNotFound | Errcode.TagNotFound;
类型errorrCode=Exclude;

谢谢你的回答。但有两个问题:1。不能再使用
Errcode.OK
Errcode.Error
了,必须是
SuccessCode.OK
ErrorCode.Error
,2。如果我想对错误代码进行排序,例如NotFoundErrorTagError,它们有一个共同的项TagNotFound,这怎么办呢?是的,我不确定你能很容易地得到(1.)的解决方案(如果有的话)-至少如果你想留在D.R.Y.,每个人都有自己的观点,但我上面描述的方式感觉很自然(每个错误代码都是结果代码,但成功代码不是错误代码,等等)。恐怕我不明白你对第(2)点的意思,但也许最好把它作为一个新问题提出来?我已经补充了这个问题。无意冒犯。此问题在开始时讨论“从枚举中忽略某些项”。它避免了定义更细粒度类型的问题,并且有一些副作用。由于某种原因,我的本地Typescript配置中的
errorCode
会导致type
Errcode
。不过,这个例子和我的具体问题都在Typescript中起作用。我不知道是什么原因导致了这种情况。是否有某种方式导致结果值也是enum而不是type?当我提交此问题时,Typescript没有排除类型。好的v2.8