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

使用枚举值作为类型时的意外行为(在Typescript中)

在Typescript中,当使用枚举值作为类型时,可能会出现一些意外行为。枚举是一种数据类型,用于定义一组命名的常量。它可以用于限制变量的取值范围,提高代码的可读性和可维护性。

然而,在使用枚举值作为类型时,需要注意以下几点:

  1. 类型兼容性:枚举值的类型是枚举本身,而不是枚举中的具体值。这意味着,当使用枚举值作为类型时,只有相同枚举类型的值才能赋值给该类型。例如:
代码语言:typescript
复制
enum Color {
  Red,
  Green,
  Blue
}

let color: Color = Color.Red;
color = 1; // 错误,只能赋值为Color枚举中的值
  1. 数字枚举的隐式转换:数字枚举的值可以隐式转换为相应的数字类型。这可能导致一些意外行为,例如:
代码语言:typescript
复制
enum Status {
  Success = 200,
  NotFound = 404
}

let status: Status = 200; // 正确,数字200可以隐式转换为Status枚举类型
  1. 枚举成员的值重复:枚举成员的值不能重复,否则会导致编译错误。例如:
代码语言:typescript
复制
enum Direction {
  Up = 1,
  Down = 2,
  Left = 1, // 错误,值重复
  Right = 3
}
  1. 枚举成员的命名冲突:枚举成员的命名不能与其他成员或变量冲突,否则会导致编译错误。例如:
代码语言:typescript
复制
enum Size {
  Small = 1,
  Medium = 2,
  Large = Small // 错误,命名冲突
}

总结起来,使用枚举值作为类型时,需要注意类型兼容性、数字枚举的隐式转换、枚举成员的值重复和命名冲突等问题。在Typescript中,可以通过合理使用枚举类型来提高代码的可读性和可维护性。

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

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

MySQL枚举类型enum字段插入不在指定范围, 是否是”插入了enum第一个”?…「建议收藏」

刚刚在看>一书”ENUM类型”一节, 以下面的代码举例, 得出结论: “还可以看出对于不在ENUM指定范围内, 并没有返回警告, 而是插入了enum(‘M’, ‘F’)第一个...这个相当于是一个警告信息,我本地测试 5.7 ,直接插入会报错,但是使用 ignore 后,数据能被强制插入,但是是空。... MySQL 枚举类型“八宗罪” 这篇文章第七条,文中提到了,如果不合法会被处理成空字符串,在后一段又提到了因为类型缘故,会根据枚举索引去取值。...在业务实践,我们通常都是拒绝使用枚举进行数据控制。...for column ‘genter’ at row 1“; 所以,建议开发尽量不用枚举类型,免得报无谓错误; 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/

1.7K20

TypeScript 5.0 正式发布!

使用可变类型约束可能会得到意外结果。...enum E { Blah = Math.random() } 每当TypeScript遇到这些问题,它都会悄无声息地退出并使用枚举策略。这意味着要放弃并集和字面量类型所有优点。...TypeScript 5.0 通过为每个计算成员创建唯一类型,设法将所有枚举转换为联合枚举。这意味着现在可以缩小所有枚举范围,并将其成员作为类型引用。...we meant outDir }; 但它会保留表达式原始类型,允许稍后代码更精确地使用。...将信息序列化为字符串,执行了一些缓存。类型显示可能作为错误报告、声明触发、代码补全等一部分发生,最终可能会相当昂贵。TypeScript 现在缓存了一些常用机制以在这些操作重用。

3.7K70

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

上述例子类型注解不会改变任何事情。一些代码库会显式指定返回类型,这可能是出于文档编写需要,或者是为了防止意外修改,或者只是个人喜好。 匿名函数 匿名函数和函数声明有点不同。...而接口名字则始终出现在报错信息 类型别名无法进行声明合并,但接口可以 接口只能用于声明对象形状,无法为原始类型命名 报错信息,接口名字将始终以原始形式出现,但只限于它们作为名字被使用时候...枚举 枚举TypeScript 添加到 JavaScript 一项特性。它允许描述一个,该可以是一组可能命名常量一个。...与大多数 TypeScript 特性不同,枚举不是类型层面添加到 JavaScript ,而是添加到语言本身和它运行时中。...正因如此,你应该了解这个特性存在,但除非你确定,否则你可能需要推迟使用它。你可以枚举引用页面中了解到有关枚举更多信息。

2.2K20

TypeScript进阶(一)深入理解类和接口

TypeScript ,我们使用 abstract 关键字来定义抽象类和抽象方法。 抽象类不能被实例化,只能被继承。确保定义抽象类使用 abstract 关键字。... TypeScript ,我们可以使用字符串或数字作为索引类型。 索引签名可以是字符串或数字类型,它们分别对应于对象属性名和数组索引。...索引签名可以是字符串或数字类型,分别对应于对象属性名和数组索引。 使用索引器要注意边界检查和类型安全性,确保索引合法性和返回类型正确。...使用箭头函数要注意外部作用域中 this 是否符合预期。...TypeScript基础(一)基本类型类型运算 TypeScript基础(二)扩展类型-枚举及其位运算 TypeScript基础(三)扩展类型-接口和类型兼容性 TypeScript基础(四)扩展类型

22910

5000 多字,让你一文掌握 TS 枚举

一、基础知识 JavaScript 布尔类型变量含有有限范围,即true和false。而在 TypeScript使用枚举,你也可以自定义相似的类型。...如果枚举某个成员使用显式方式赋值,但后续成员未显示赋值, TypeScript 会基于当前成员加 1 作为后续成员,比如以下 Enum 枚举成员 C: enum Enum { A,...异构枚举由于其应用较少而很少使用。 目前 TypeScript 只支持将数字和字符串作为枚举成员。不允许使用其他,比如 symbols。...TypeScript 2.6 支持 .ts 文件通过报错一行上方使用// @ts-ignore来忽略错误。 // @ts-ignore注释会忽略下一行中产生所有错误。...但是,如果我们添加一个成员Maybe到NoYes枚举,之后value推断类型是NoYes.Maybe,这时该变量类型与throwUnsupportedValue()方法参数类型静态上不兼容。

3.8K10

一文让你彻底掌握 TS 枚举

一、基础知识 JavaScript 布尔类型变量含有有限范围,即 true 和 false。而在 TypeScript使用枚举,你也可以自定义相似的类型。...如果枚举某个成员使用显式方式赋值,但后续成员未显示赋值, TypeScript 会基于当前成员加 1 作为后续成员,比如以下 Enum 枚举成员 C: enum Enum { A,...异构枚举由于其应用较少而很少使用。 目前 TypeScript 只支持将数字和字符串作为枚举成员。不允许使用其他,比如 symbols。...TypeScript 2.6 支持 .ts 文件通过报错一行上方使用 // @ts-ignore 来忽略错误。 // @ts-ignore 注释会忽略下一行中产生所有错误。...但是,如果我们添加一个成员 Maybe 到 NoYes 枚举,之后 value 推断类型是 NoYes.Maybe,这时该变量类型与 throwUnsupportedValue() 方法参数类型静态上不兼容

4.3K20

掌握 TypeScript:20 个提高代码质量最佳实践

类型推断是 TypeScript 编译器根据变量赋值自动推断变量类型能力。这意味着你不必每次声明变量都显式指定类型。相反,编译器会根据推断类型。...例如,以下代码片段TypeScript 会自动推断 name 变量类型为字符串: let name = "John"; 类型推断处理复杂类型或将变量初始化为从函数返回特别有用。...最佳实践8:使用 unknown 类型 unknown 类型TypeScript 3.0 引入一种强大且限制性更强类型。它比 any 类型更具限制性,并可以帮助你防止意外类型错误。...最佳实践11:使用枚举 枚举(Enums)是 TypeScript 定义一组命名常量一种方式。它们可以用于创建更具可读性和可维护性代码,通过给一组相关赋予有意义名称。...15: 类型保护 TypeScript ,处理复杂类型,很难跟踪变量不同可能性。

3.9K30

【译】2019年开始使用Typescript

当你想一组具有关联性描述名称不同枚举就很有用处了。 默认,为枚举分配从0开始,接下来为(上一个枚举)加1。...指定不返回任何内容函数返回,最常用它。...基本类型推断 TypeScript可以变量初始化期间,设置默认参数以及确定函数返回推断类型。...最佳通用类型推断 从多种可能类型推断类型TypeScript使用最佳通用类型算法来选择适用于所有其他候选类型类型。...类型注释 当类型推断系统不够用,你需要在变量和对象上声明类型。 基本类型 (上面)基本静态类型章节介绍,所有的类型使用:后跟类型名来声明。

2.2K20

2019年开始使用Typescript

当你想一组具有关联性描述名称不同枚举就很有用处了。 默认,为枚举分配从0开始,接下来为(上一个枚举)加1。...指定不返回任何内容函数返回,最常用它。...基本类型推断 TypeScript可以变量初始化期间,设置默认参数以及确定函数返回推断类型。...最佳通用类型推断 从多种可能类型推断类型TypeScript使用最佳通用类型算法来选择适用于所有其他候选类型类型。...类型注释 当类型推断系统不够用,你需要在变量和对象上声明类型。 基本类型 (上面)基本静态类型章节介绍,所有的类型使用:后跟类型名来声明。

85320

15个Typescript 5.0 重要新功能快速了解一下

所有枚举都是联合枚举 TypeScript 5.0 ,所有枚举现在都被视为联合枚举。 联合枚举使用枚举提供了更好类型安全性和改进的人体工程学。...这意味着现在可以缩小所有枚举范围,并将其成员也作为类型引用。 5. — moduleResolution 捆绑器 TypeScript 5.0 引入了一种新模块解析策略,称为 bundler。...使用结构类型使用 TypeScript 对 JavaScript 代码进行类型检查,此功能特别有用。...处理需要支持多种参数类型或形状复杂函数,此功能特别有用。... — build 下传递特定于发射标志 TypeScript 5.0 引入了使用 --build 标志传递 emit-specific 标志能力。

20930

细数这些年被困扰过 TS 问题

7.3 {} 类型 {} 类型描述了一个没有成员对象。当你试图访问这样一个对象任意属性TypeScript 会产生一个编译错误。...]" obj.toString(); 八、数字枚举与字符串枚举之间有什么区别 8.1 数字枚举 JavaScript 布尔类型变量含有有限范围,即 true 和 false。...如果枚举某个成员使用显式方式赋值,但后续成员未显示赋值, TypeScript 会基于当前成员加 1 作为后续成员。...8.2 字符串枚举 除了数字枚举,我们还可以使用字符串作为枚举成员: enum NoYes { No = 'No', Yes = 'Yes', } assert.equal(NoYes.No...另外,对于纯字符串枚举,我们不能省略任何初始化程序。而数字枚举如果没有显式设置,则会使用默认进行初始化。

15K73

Typescript基础语法

typescript与javascript typescript是一个js超集,个人理解为包装了面向对象编程逻辑语法糖,所以一般使用typescript语言来编写代码,然后再使用typescript...安装typescript npm install -g typescript 类型语法 通过形参右侧使用 : 类型,代表限定形参类型。...其中,any代表任意类型,比较特殊有,void空返回,只能赋值为undefined或者null,never类型代表永远没有返回类型,比如抛出异常函数,死循环函数。...typescript还支持创建一个可以指代多种类型类型,通过|运算符,即可使用不同类型创建一个联合类型,代表当前变量为其中之一,如 let a : string | number; 类型别名 typescript...= string; type sTringNNumber = string | number; let a : tString; 枚举 与java类似,使用enum关键字创建枚举,默认枚举为整数,不指定整数值默认从

1.5K20

TypeScript超详细入门教程(上)

书写声明文件需要用到前面的语法知识,学会书写声明文件,我们就可以使用了一些冷门没有声明文件JS库,自行为它们书写声明文件,以便我们开发使用。...会把我们定义枚举字段名分别作为对象属性名和,把枚举字段分别作为对象和属性名,同时添加到对象。...枚举成员类型和联合枚举类型 如果枚举里所有成员都是字面量类型,那么这个枚举每个成员和枚举本身都可以作为类型使用,先来看下满足条件枚举成员有哪些: 不带初始枚举成员,例如enum...} 当我们枚举所有成员都是上面这三种情况时候,枚举和成员就可以作为类型来用: (1) 枚举成员类型 我们可以把符合条件枚举成员作为类型使用,来看例子: enum Animal...我们还学习了数字枚举和字符串枚举杂交体——异构枚举,但是很少用,原因也解释过了;枚举枚举成员作为使用同时,还可以作为类型使用,但是有三个条件,可以回顾下;最后我们还学习了枚举在编译后是一个对象

4.1K41

TypeScript魔法堂:枚举超实用手册

所以我还是建议大家运用空杯心理,重头理解TypeScript枚举类型,将过去知识作为助燃剂,而不是围栏更适宜。...当其它地方调用该枚举类型,将直接把枚举类型成员内联到使用处,如下: const enum Response { No, Yes, } console.log(Response.NO...使用const enum场景:能不用enum就用const enum(哈哈!) 使用enum场景第一条还很好理解,但第二条是啥回事呢?...外部枚举declare enum作用? 所谓外部枚举,即使我们为了TypeScript开发环境下,更好地使用某些已采用JavaScript编写库,而被迫为其编写枚举类型声明。...于是.d.ts文件编写如下外部枚举类型声明 declare enum DialogModes { NO, YES, ALL, } 总结 对于日常开发我们绕不过枚举类型TypeScript

1.1K20

TypeScript项目开发应用实践体会

必知必会特性 TypeScript,有一些好用特性和功能对于日常开发来说是比较常见。下面就罗列一些较为实用知识点作为一个小小备忘录。...实例当我们调用.name时候,其实本身就是调用了其get方式,而设置,则是调用set方法, 需要注意是,._name也输出了,但是TypeScript会进行提示你....image.png 枚举(enum)使用场景在于可以定义部分行为和状态。通过一个?...image.png 泛型是TypeScript当中必知必会一个属性,很多时候,类型推导开始很难进行推倒。相比于使用 any 类型使用泛型来创建可复用组件要更好,因为泛型会保留参数类型。...在于后端通信,会返回很多数据,那么使用TypeScript时候怎么去定义这些类型呢?又怎么团队协作中进行合作呢? 大部分实验当中,我们是这样做

2.8K60

前端入门25-福音 TypeScript声明正文-TypeScript

,never any:表示当前这个变量可以被赋予任何数据类型使用; void:表示当前这个变量只能被赋予 null 或 undefined,通常用于函数返回声明; enum:枚举类型,弥补 JavaScript...枚举数据类型; never:表示永不存在,常用于死循环函数,抛异常函数等返回声明,因为这些函数永远也不会有一个返回。...TypeScript 数据类型是用于类型声明服务,类似于 Java 定义变量或声明方法返回必须指定一个类型。...如果想让某个类型既可以当做函数被调用,又可以作为对象,拥有某些属性行为,那么可以结合上述声明函数类型接口方式和正常接口定义属性行为方式一起使用。...当然,接口除了用来鸭式辩型作为类型区分外,也可以像 Java 里接口一样,定义一些行为规范,强制实现该接口行为,如: interface Dog { name:string;

3.1K21

TypeScript 演化史 — 第七章】映射类型和更好字面量类型推断

对于希望应用程序冻结每种类型对象,咱们就必须定义一个包装器函数,该函数接受该类型对象并返回冻结类型对象。没有映射类型,咱们就不能以通用方式静态地使用 Object.freeze()。...方括号使用了 keyof 操作符。keyof T 将 T 类型所有属性名表示为字符串字面量类型联合。 方括号 in 关键字表示我们正在处理映射类型。...更多映射类型示例 上面已经看到 lib.d.ts 文件内置 Readonly 类型。此外,TypeScript 定义了其他映射类型,这些映射类型各种情况下都非常有用。... TypeScript 2.0 类型系统扩展了几个新字面量类型: boolean 字面量类型 数字字面量 枚举字面量 不带类型注解 const 变量或 readonly 属性类型推断为字面量初始化类型...readonly 修饰符只限制从 TypeScript 代码对属性访问,在运行时就无能为力。也就是说,它会被编译删除掉,不会出现在生成 JS 代码

3.7K40

《现代Typescript高级教程》枚举和泛型

这两个特性能大大提高代码可重用性和安全性。 枚举 枚举TypeScript 中一种特殊数据类型,允许我们为一组数值设定友好名字。枚举定义使用 enum 关键字。...TypeScript 支持这种用法,但我们实际项目中应尽可能避免使用异构枚举,因为这会引入不必要复杂性。...泛型允许我们定义函数、类或接口使用类型参数,这些类型参数使用时可以被动态地指定具体类型。 以下是泛型 TypeScript 几个常见应用场景: 1....通过创建类实例显式指定类型参数为number,我们创建了一个具体container对象,它value属性类型为number,并可以使用getValue方法获取该。...泛型 TypeScript 中广泛应用于函数、类、接口和类型别名定义,它提供了一种灵活、类型安全且可重用方式来处理不同类型数据。

16410
领券