首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

TypeScript错误:枚举值的比较显然将“始终返回false”,即使枚举上存在所有类型

这个错误是由于在比较枚举值时,使用了不同的枚举类型,导致比较结果始终为false。下面我会详细解释这个错误以及如何解决它。

首先,枚举是一种用于定义一组命名常量的数据类型。在TypeScript中,枚举类型可以包含多个枚举成员,每个成员都有一个名称和一个对应的值。

当我们比较两个枚举值时,TypeScript会根据它们的值进行比较。如果两个枚举值的类型不同,比较结果将始终为false,即使它们的值相同。

解决这个错误的方法是确保比较的两个枚举值具有相同的枚举类型。可以通过以下几种方式来实现:

  1. 显式指定枚举类型:在比较之前,确保两个枚举值的类型相同。可以通过将枚举值转换为相同的枚举类型来实现。例如:
  2. 显式指定枚举类型:在比较之前,确保两个枚举值的类型相同。可以通过将枚举值转换为相同的枚举类型来实现。例如:
  3. 上述代码中,color和size是不同的枚举类型,因此它们的比较结果始终为false。要解决这个问题,可以将其中一个枚举值转换为另一个枚举类型,例如:
  4. 上述代码中,color和size是不同的枚举类型,因此它们的比较结果始终为false。要解决这个问题,可以将其中一个枚举值转换为另一个枚举类型,例如:
  5. 使用联合类型:如果需要比较不同枚举类型的值,可以使用联合类型来声明变量。例如:
  6. 使用联合类型:如果需要比较不同枚举类型的值,可以使用联合类型来声明变量。例如:
  7. 上述代码中,color和size都是Color和Size的联合类型,它们的比较结果始终为false。要解决这个问题,可以使用类型断言来指定它们的具体类型,例如:
  8. 上述代码中,color和size都是Color和Size的联合类型,它们的比较结果始终为false。要解决这个问题,可以使用类型断言来指定它们的具体类型,例如:

总结起来,要解决"枚举值的比较显然将“始终返回false”,即使枚举上存在所有类型"的错误,需要确保比较的两个枚举值具有相同的枚举类型。可以通过显式指定枚举类型或使用联合类型来实现。在实际开发中,建议仔细检查比较的枚举值的类型,确保它们的类型一致。

腾讯云相关产品和产品介绍链接地址:

  • 云服务器(CVM):提供可扩展的计算能力,满足各种业务需求。产品介绍链接
  • 云数据库 MySQL 版(CDB):高性能、可扩展的关系型数据库服务。产品介绍链接
  • 人工智能平台(AI Lab):提供丰富的人工智能算法和模型,帮助开发者快速构建智能应用。产品介绍链接
  • 云存储(COS):安全、稳定、低成本的对象存储服务,适用于各种数据存储需求。产品介绍链接
  • 腾讯云区块链服务(Tencent Blockchain):提供高性能、可扩展的区块链解决方案,帮助企业构建区块链应用。产品介绍链接
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

TypeScript超详细入门教程(

2.2.2 枚举 enum类型在 C++这些语言中比较常见,TypeScript 在 ES 原有类型基础加入枚举类型,使我们在 TypeScript 中也可以给一组数值赋予名字,这样对开发者来说较为友好...2.2.5 never never 类型指那些永不存在类型,它是那些总会抛出异常或根本不会有返回函数表达式返回类型,当变量被永不为真的类型保护(后面章节会详细介绍)所约束时,该变量也是 never...; }; 这个 errorFunc 函数总是会抛出异常,所以它返回类型是 never,用来表明它返回是永不存在。...“{ name: string; } & { age: number; }”存在属性“address” 补充阅读:Object.assign方法可以合并多个对象,多个对象属性添加到一个对象中并返回...| number"存在属性 "length" // 类型 "number"存在属性 "length" 很显然,我们是要做判断,我们判断如果 target.length 不为 undefined

4.1K41

TypeScript 演化史 — 第四章】更多字面量类型 与 内置类型声明

TypeScript 1.8 引入了字符串字面量类型,用于变量限制为可能字符串有限集。在 TypeScript 2.0 中,字面量类型不再局限于字符串。...: false = false; // OK 试图为每个局部变量分配相反布尔会导致类型错误: const TRUE: true = false; // Error: Type 'false' is...,编辑器会提示我们,例如, httpPort 与 443 进行比较时: ?...由于 httpPort 类型为 80,因此它始终包含 80,该值当然永远不会等于 443。在这种情况下,TypeScript 编译器可以帮助咱们检测错误逻辑和无效代码。...TypeScript 只注入你指定类型;也就是说,它会将所有其他 API 组视为不存在于你环境中。

1.2K30

TypeScript 演化史 -- 4】更多字面量类型 与 内置类型声明

TypeScript 1.8 引入了字符串字面量类型,用于变量限制为可能字符串有限集。在 TypeScript 2.0 中,字面量类型不再局限于字符串。...,编辑器会提示我们,例如, httpPort 与 443 进行比较时: 由于 httpPort 类型为 80,因此它始终包含 80,该值当然永远不会等于 443。...在这种情况下,TypeScript 编译器可以帮助咱们检测错误逻辑和无效代码。 枚举字面量类型 最后,咱们还可以使用枚举作为字面量类型。...TypeScript 只注入你指定类型;也就是说,它会将所有其他 API 组视为不存在于你环境中。...咱要让 TypeScript 知道 Promise 会在运行时存在,这就是 lib 编译器选项发挥作用地方: 注意,一旦覆盖了默认,就必须显式地提供所有API组,如下所示: { "compilerOptions

1.1K20

TypeScript 官方手册翻译计划【二】:普通类型

即使没有给参数添加类型注解,TypeScript 也会检查你传递参数个数是否正确 返回类型注解 你也可以给返回添加类型注解。...举个例子,如果你使用 document.getElementById,那么 TypeScript 只知道这个调用会返回某个 HTMLElement,但你却知道你页面始终存在一个给定 ID HTMLCanvasElement...即使类型断言是错误,也不会抛出异常或者产生 null TypeScript 只允许断言之后类型比之前类型更具体或者更不具体。...枚举 枚举TypeScript 添加到 JavaScript 中一项特性。它允许描述一个,该可以是一组可能命名常量中一个。...= Symbol("name"); if (firstName === secondName) { // 此条件始终返回 "false",因为类型 "typeof firstName" 和 "typeof

2.2K20

TS 进阶 - 类型基础

,同时,其编译产物中并不会存在一个额外辅助对象,对枚举成员访问会被直接内联替换为枚举。...# void 类型TypeScript 中,一个没有返回(即没有调用 return 语句)函数,其返回类型应该被标记为 void 而不是 undefined,尽管它实际就是 undefined...: false): number;,重载签名二,bar不传或传入 bar false 时,返回类型为 number; function func(foo: number, bar?...: boolean): string | number;,函数实现签名,包含重载签名所有可能情况 基于重载签名,实现了入参类型返回类型可能情况进行关联,获得了更精确类型标注能力。...静态成员不会被实例继承,始终属于当前定义这个类(及其子类)。原型对象实例成员会沿着原型链进行传递,能被继承。

1.7K50

TypeScript 5.0 正式发布!

具体定义装饰器函数复杂程度取决于想要保证什么。需要记住,装饰器使用次数超过它们编写次数,所以类型良好版本通常是更好——但显然与可读性有一个权衡,所以请尽量保持简单。.../lib", // ... } } 所有枚举都是联合枚举TypeScript 最初引入枚举时,它只不过是一组具有相同类型数值常量: enum E { Foo =...TypeScript 5.0 通过为每个计算成员创建唯一类型,设法所有枚举转换为联合枚举。这意味着现在可以缩小所有枚举范围,并将其成员作为类型引用。...如果不关心区分大小写,那么这个列表显然没有排序。字母 f 出现在 t 和 T 之前。 但在大多数编程语言中,排序默认是比较字符串字节。...在信息序列化为字符串时,执行了一些缓存。类型显示可能作为错误报告、声明触发、代码补全等一部分发生,最终可能会相当昂贵。TypeScript 现在缓存了一些常用机制以在这些操作中重用。

3.8K70

【TS 演化史 -- 13】字符串枚举 和 弱类型(Weak Type)探测

字符串枚举 TypeScript 2.4 实现了最受欢迎特性之一:字符串枚举,或者更精确地说,带有字符串成员枚举。...字符串枚举成员没有反向映射 TypeScript 为每个构造映射对象枚举发出一些映射代码。...MediaTypes["XML"]; // "application/xml" MediaTypes["application/xml"]; // undefined 与具有数字成员枚举进行比较:...相反,它将内联所有使用站点每个枚举成员,从而可能节省一些字节和属性访问间接性开销: fetch("https://example.com/api/endpoint", { headers...PrettierConfig所有属性都是可选,所以完全可以不指定它们。相反,咱们prettierConfig对象有一个semicolons 属性,它在prettierConfig类型中不存在

1.6K10

JavaScript和TypeScriptsymbol

unique symbol 与声明紧密相关,只允许在 const 声明中引用这个确切符号。 你可以 TypeScript名义类型视为 JavaScript 中名义。...这实际意味着你不能将字符串分配给 enum 类型,因为 TypeScript 会将它们视为唯一: enum Colors { Red = 'Red', Green = 'Green',.... if(Moods.Blue === Colors.Blue) { // Nope } 即使使用相同类型,在枚举中它们也足够独特,以便 TypeScript 认为它们不具有可比性。...) { // Nope } 我们要添加一些 TypeScript 注释: 我们所有符号键(和)声明为 unique symbols,这意味着我们分配符号常量永远不会改变。...我们枚举”对象声明为 as const。有了它,TypeScript 就会将类型设置为允许每个符号,只允许我们定义完全相同符号。 这允许我们在为函数声明定义符号“枚举”时获得更多类型安全性。

1.3K20

深入类型系统_TypeScript笔记8

,因此多数场景下不必显式声明类型,它猜得到 P.S.即使在一切都要提前确定类型Haskell中,也并非处处充斥着类型声明,而是相当简洁,正是因为编译器提供了强大类型推断支持 在类似赋值场景能够根据目标值来确定类型...,具体如下: 变量或(类)成员初始 参数默认 函数返回 这3类都能提供直接类型信息,进而确定目标类型。...,最终确定一个最“宽”类型(包容数组中所有其它类型,称为best common type)作为数组类型 如果数组元素中没有一个能够兼容其它所有类型类型(即找不出best common type),就用联合类型...),反过来的话是安全,因为返回类型相同,参数绰绰有余,msg类型也兼容(string是any类型) 具体TypeScript类型系统对函数类型兼容性判定规则如下: 参数:要求对应参数类型兼容...} let sum: sum = add; sum函数有两个重载版本,所以目标函数至少要兼容这两个版本 四.枚举 首先,来自不同枚举类型枚举不兼容,例如: enum Status { Ready,

97540

TypeScript基础总结

str = '123'; str = 123; // 错误 bool = true; bool = false; bool = 'false'; // 错误 数组 TS里手动指明一个数组类型很简单...]; // 错误 枚举 枚举在TS里面是原生支持,使用枚举我们可以定义一些带名字常量,它好处是可以让语意更清晰。...定义一个枚举,需要使用 enum。 TS 仅支持基于数字和字符串枚举。如果是数字枚举枚举默认是从0开始,依次自增。你也可以手动设置第一个枚举,比如为1。...比如我们需要一个函数,同时支持入参是一个数字或字符串,返回类型和参数类型相同: function identity(arg: number): number { return arg; } function...static关键字:可以用来修饰类属性和方法,静态属性和静态方法存在而不是实例,可以通过 ”类名.” 方式来访问。 readonly关键字:属性初始化之后不可修改。

99810

以淘宝店铺为例,谈谈 TypeScript ESLint 规则集考量

规则会要求你为函数与类方法显式声明其返回,switch-exhaustiveness-check 规则会要求你处理联合类型变量所有类型分支。...基础约束 为了适应读者可能有的不同约束严格程度,这里规则拆分为基础约束与严格约束部分,基础约束规则以语法统一(包括实际代码与类型部分)为主,推荐所有人在所有项目中使用,即使是个人项目——说实在,...为什么:虽然 TypeScript 是允许使用各种合法表达式作为枚举成员,但由于枚举编译结果拥有自己作用域,因此可能导致错误赋值,如: const imOutside = 2; const b...并且会在下一行实际不存在错误时抛出一个错误。...而且,此规则配置项最多允许 boolean | null 这样与 true / false 进行比较,所以还是让你类型更精确一点吧。

2.7K30

深入浅出 TypeScript

表示非原始类型。比如枚举、数组、元组都是 object 类型枚举类型 声明枚举类型时,如果没有显式赋值,那么枚举从 0 递增。如果显式赋值,那么后面的从当前递增。...keyof,即索引类型查询操作符,我们可以用 keyof作用于泛型 T 上来获取泛型 T 所有 public属性名构成联合类型。...js文件 */ "checkJs": true, /* checkJs为true或false,用来指定是否检查和报告js文件中错误,默认是false.../ "strict": true /* strict为true或false,用于指定是否启动所有类型检查,如果设为true则会同时开启下面这几个严格类型检查,默认为false */,...strictNullChecks,默认为false */ "noImplicitThis": true, /* 当this表达式为any类型时候,生成一个错误

2.8K30

Go中枚举有效性检查最佳实践

因翻译水平有限,难免存在翻译准确性问题,敬请谅解 本文介绍关于检查枚举有效性最佳实践,即判断是否在定义常量范围内。 由于Go中枚举是使用类型别名构造,因此我们无法实现对枚举限制。...事实,由于Weekday类型是一个int,100也是一个合法。 要检查提供weekday字段是否合法,我们可以针对该(≤7)实现一个自定义检查方法。...end比较 注意:常量end保持未被导出状态(即私有状态),以便客户端不能使用它。...即使Weekday类型被加入,只要我们保持end常量是在枚举列表最后一行,那么isValid方法始终告诉我们提供是否是被视为一个有效: fmt.Println(Monday.isValid...否则,例如“该常量必须等于3”,那么我们不应该使用iota来处理而是指定明确。 unkown应该始终分配给零 要检查枚举有效性,我们可以通过在最后一行定义一个私有常量来实现。

1.4K20

TypeScript 演化史 — 第八章】字面量类型扩展 和 无类型导入

image.png 一篇更好类型推断文章中,解释了 TypeScript 如何用 const 变量和 readonly 属性字面量始化来推断字面量类型。...如果 TypeScript 为 let 变量推断一个字面量类型,那么尝试为指定以外任何赋值都会在编译时产生错误。...然而,事实并非如此: isValidPasswordLength("open sesame", 6); // false 这里问题在于 <= max 比较。...如果max是 undefined,那么 <= max 永远都为false。在这种情况下,isValidPasswordLength永远不会返回true。...只要不再将max与undefined 进行比较,就可以了 混合类 TypeScript 一个目的是支持不同框架和库中使用通用 JS 模式。

4.5K10

类型即正义:TypeScript 从入门到实践(一)

never等,这是基础类型,我们甚至可以基于类型进行编程,使用类型版本控制、组织结构来完成高级类型编写,进而将类型附着在 JavaScript 对应编程语言特性 JS 静态化,使得我们可以在编译期间就能发现类型错误...never / 函数类型定义与实战 never 字面意思是 “永不”,在 TS 中代表不存在类型,一般用于给函数进行类型声明,函数绝不会有返回时候使用,比如函数内抛出错误,我们首先看个例子讲解一下如何给函数进行类型声明...具体操作,接收信息,抛出错误 } 可以看到我们同样使用了 TS 冒号语法来进行函数参数和返回类型定义,因为 message 一般是一个字符串 ID,所以我们给它 string 类型,而这个函数绝不会有返回...,只是单纯抛出错误,所以我们给返回一个 never 类型。...当然我们也可以手动给其中某个枚举赋值一个数字,这样这个枚举后面的会依次在这个赋值数字递增,我们来看个例子: enum UserId { tuture, mRcfps = 6, crxk

2.6K20

4000字讲清 《深入理解TypeScript》一书 【基础篇】

记住所有的 JavaScript 都是有效 TypeScript。...,初始化第一个成员,以便生成代码不是先前定义枚举类型。...它自然被分配一些例子: 一个从来不会有返回函数(如:如果函数内含有 while(true) {}); 一个总是会抛出错误函数(如:function foo() { throw new Error...,never 表示一个从来不会优雅返回函数时,你可能马上就会想到与此类似的 void,然而实际,void 表示没有任何类型,never 表示永远不存在类型。...当一个函数没有返回时,它返回了一个 void 类型,但是,当一个函数根本就没有返回时(或者总是抛出错误),它返回了一个 never,void 指可以被赋值类型(在 strictNullChecking

1.9K30
领券