TypeScript - TypeScript'te bir Enum'dan bazı öğeleri nasıl çıkarabilirim?
API istek durumunu netleştirmek için bir Enum tanımladım:
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 */;
ErrorErrcode'i, Errcode.Ok dışındaki tüm Errcode öğelerini ifade edecek şekilde (ve NotFoundError'ın tüm öğelerini de içermesi gerekiyor) nasıl tanımlayabilirim?
Daha ayrıntılı türleri tanımlayıp onları böyle birleştiremiyorum:
enum SuccessErrcode {
Ok =0,
}
enum NotFoundErrcode {
PostsNotFound=202,
TagNotFound=203,
}
enum ErrorErrcode {
Error=1,
}
type Errcode =SuccessErrcode|NotFoundError|SuccessErrcode;
Bunu yaparsam, Errcode.xxx kullanamayacağım - bir kodu kullanmak için, onun nerede atandığını bilmem gerekiyor. (örneğin Errcode.TagNotFound’dan NotFoundError.TagNotFound’a). Ve şunu göz önünde bulundur: TagErrcode ve NotFoundErrcode olduğunda, TagNotFound=203 iki kez tanımlanmış olacak.
Cevap #1
TypeScript 2.8 ve koşullu tiplerin eklenmesiyle, belirli enum değerlerini hariç tutmak için yerleşik Exclude öğesini kullanabilirsiniz:
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>;
Typescript Oyun Alanı
Cevap #2
İlk olarak daha ayrıntılı türleri tanımlarsınız. Belki şöyle bir şey:
enum ErrorCode {
Error = 1,
AccessDeny = 201,
PostsNotFound = 202,
TagNotFound = 203,
}
enum SuccessCode {
Ok = 0
}
Daha sonra bir Birleşim Tipi'ni ya SuccessCode ya da ErrorCode olacak şekilde tanımlayabilirsiniz:
type ResultCode = ErrorCode | SuccessCode;
bunu sonra şöyle kullanabilirsiniz:
const myResult1: ResultCode = ErrorCode.AccessDeny;
const myResult2: ResultCode = SuccessCode.Ok;
