我定义了一个Enum来阐明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 */;
Run Code Online (Sandbox Code Playgroud)
如何定义ErrorErrcode除了Errcode.Ok之外的所有Errcode项(它应该包括NotFoundError的所有项)?
我无法定义更细粒度的类型,Union他们喜欢这样:
enum SuccessErrcode {
Ok =0,
}
enum NotFoundErrcode {
PostsNotFound=202,
TagNotFound=203,
}
enum ErrorErrcode {
Error=1,
}
type Errcode =SuccessErrcode|NotFoundError|SuccessErrcode;
Run Code Online (Sandbox Code Playgroud)
如果我这样做,我将不能使用Errcode.xxx-使用的代码,我必须知道它在哪里被分配的(例如,从,Errcode.TagNotFound到NotFoundError.TagNotFound).并考虑到 - 当有TagErrcode和时NotFoundErrcode,TagNotFound=203将定义两次.
use*_*234 23
从TypeScript 2.8和附加的条件类型开始,您可以使用内置的Exclude方法排除某些枚举值:
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 = Exclude<Errcode, Errcode.Ok>;
Run Code Online (Sandbox Code Playgroud)
首先,您将定义更精细的类型。也许是这样的:
enum ErrorCode {
Error = 1,
AccessDeny = 201,
PostsNotFound = 202,
TagNotFound = 203,
}
enum SuccessCode {
Ok = 0
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以将Union Type定义为a SuccessCode或a ErrorCode:
type ResultCode = ErrorCode | SuccessCode;
Run Code Online (Sandbox Code Playgroud)
然后您可以像这样使用它:
const myResult1: ResultCode = ErrorCode.AccessDeny;
const myResult2: ResultCode = SuccessCode.Ok;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2254 次 |
| 最近记录: |