检查函数参数是否是typescript中的特定枚举类型
我有一个函数,它接受一个参数,这个参数在typescript中有几个不同的枚举类型。我想检查参数具有哪种枚举类型。甚至可以检查吗?下面是一个示例代码:检查函数参数是否是typescript中的特定枚举类型,typescript,enums,Typescript,Enums,我有一个函数,它接受一个参数,这个参数在typescript中有几个不同的枚举类型。我想检查参数具有哪种枚举类型。甚至可以检查吗?下面是一个示例代码: enum X { ONE, TWO } enum Y { THREE, FOUR } function check(arg1: X | Y) { if (arg1 is X) { // do something with X } if (arg1 is Y) {
enum X {
ONE,
TWO
}
enum Y {
THREE,
FOUR
}
function check(arg1: X | Y) {
if (arg1 is X) {
// do something with X
}
if (arg1 is Y) {
// do something with Y
}
}
可以使用枚举类型的保护函数,如中所示 在这种情况下:
enum X {
ONE,
TWO
}
enum Y {
THREE = 3,
FOUR
}
const isSomeEnum = <T>(e: T) => (token: any): token is T[keyof T] =>
(Object as any).values(e).includes(token as T[keyof T]);
function check(arg1: X | Y) {
if (isSomeEnum(X)(arg1)) {
console.log('Arg is X')
}
if (isSomeEnum(Y)(arg1)) {
console.log('Arg is Y')
}
}
check(X.ONE)
check(Y.THREE)
check(X.TWO)
check(Y.FOUR)
enum X{
一,,
两个
}
枚举Y{
三等于三,
四
}
常量isSomeEnum=(e:T)=>(令牌:any):令牌是T[keyof T]=>
值(e)包括(标记为T[keyof T]);
功能检查(arg1:X | Y){
if(isSomeEnum(X)(arg1)){
console.log('Arg是X')
}
if(isSomeEnum(Y)(arg1)){
console.log('Arg是Y')
}
}
支票(X.1)
支票(Y.3)
支票(X.2)
支票(Y.4)
要做到这一点,您需要确保枚举值不重叠,这就是为什么您需要在Y的定义中包含“THREE=3”。不可能。别忘了 枚举是TypeScript为数不多的功能之一,它不是一个 类型级别JavaScript的扩展 枚举允许开发人员定义一组命名常量。使用 枚举可以更容易地记录意图,或创建一组 不同的案例。TypeScript提供数字和基于字符串的脚本 枚举
在您的示例中:X.ONE=Y.THREE=0,X.TWO=Y.FOUR=1当您使用枚举类型(例如,
let value:X=X.ONE
)描述变量时,该变量需要枚举的一个属性值,而不是枚举本身。枚举的主要思想是记录和重用一组值(例如,enum Colors{BLUE:'#0000ff',YELLOW:'#ffff00'}
)。因此,如果使用颜色枚举描述变量,该变量将接受Colors.BLUE或Colors.YELLOW,它们解析为颜色的实际值(例如,“#0000ff”
);因此,该变量不能保存颜色枚举本身,只能保存枚举的值
枚举作为对象保留在编译代码中。例如,示例中的枚举X和Y将变成以下对象:
var X = { '0': 'ONE', '1': 'TWO', ONE: 0, TWO: 1 }
var Y = { '0': 'THREE', '1': 'FOUR', THREE: 0, FOUR: 1 }
在函数中,arg1
将包含这些枚举之一的值,即0或1。因此,在您的示例中,您可以检查arg1
是否属于这些对象之一(例如,X[arg1]!==未定义的),但无法保证arg1
只属于X还是只属于Y,因为X和Y在某个点上可能包含相同的键和或值(例如,两者都有键“one”)
因此,我们需要在价值比较的基础上做出决策,比如:
if (arg1 === X.ONE) {
// do something
}
if (arg2 === Y.THREE) {
// do something
}
或者通过检查值是否属于特定枚举对象:
if (X[arg1] !== undefined) {
// do something
}
if (Y[arg1] !== undefined) {
// do something
}
没有TS功能检查值是否专门属于特定枚举