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

按枚举键入的对象键-不能分配给类型'string | number | symbol‘

按枚举键入的对象键是指在 TypeScript 中使用枚举类型作为对象的键时,不能将键的类型分配为字符串(string)、数字(number)或符号(symbol)。

枚举类型是一种由一组命名的常量组成的数据类型,它们可以作为键来使用。当使用枚举类型作为对象的键时,它们可以提供更具可读性和可维护性的代码。

下面是按枚举键入的对象键的特点、优势和应用场景:

特点:

  • 对象的键使用枚举类型定义,而不是字符串、数字或符号。
  • 使用枚举类型的键可以提供更好的代码可读性和可维护性。
  • TypeScript 编译器可以检查使用了枚举类型作为对象键的代码,确保类型的准确性。

优势:

  • 更好的代码可读性:使用枚举类型作为对象键可以使代码更易读,因为枚举常量具有描述性的名称。
  • 更高的代码可维护性:由于枚举常量是命名的,如果需要对对象键进行更改,只需更新枚举类型的定义即可,而不需要在代码中手动查找和替换字符串、数字或符号。
  • 类型安全性:TypeScript 编译器可以通过检查枚举类型来确保对象键的类型的准确性,避免了将错误的类型分配给对象键的可能性。

应用场景:

  • 状态管理:使用枚举类型作为对象键可以更好地管理应用程序中的不同状态。例如,一个任务对象可以使用枚举类型的状态键来表示其当前状态,如"进行中"、"已完成"等。
  • 配置选项:使用枚举类型作为对象键可以更清晰地表示可选配置的不同选项。例如,一个网站的配置对象可以使用枚举类型的键来表示不同的主题、语言、布局等选项。
  • 错误码:使用枚举类型作为对象键可以更好地组织和表示错误码。例如,一个 API 响应对象可以使用枚举类型的键来表示不同的错误码,如"无权限"、"参数错误"等。

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

  • 腾讯云对象存储(COS):腾讯云对象存储(Cloud Object Storage,COS)是一种存储海量文件的分布式存储服务。它适用于网站托管、图片和视频存储、大数据分析、备份和恢复等场景。了解更多信息,请访问:腾讯云对象存储(COS)产品介绍
  • 腾讯云云数据库 MySQL 版(TencentDB for MySQL):腾讯云云数据库 MySQL 版(TencentDB for MySQL)是一种高可用、可扩展、全面兼容 MySQL 协议的关系型数据库服务。它适用于 Web 应用程序、移动应用程序、游戏、物联网等各种场景。了解更多信息,请访问:腾讯云云数据库 MySQL 版(TencentDB for MySQL)产品介绍
  • 腾讯云人脸识别(Face Recognition):腾讯云人脸识别(Face Recognition)是一种基于人脸特征进行身份验证和识别的人工智能服务。它适用于人脸门禁、人脸考勤、人脸支付、人脸检索等场景。了解更多信息,请访问:腾讯云人脸识别(Face Recognition)产品介绍

注意:上述推荐的产品仅作为示例,实际使用时需根据具体需求选择适合的产品。

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

相关·内容

如何在TypeScript中使用基本类型

这种组合允许开发人员使用完整 JavaScript 生态系统和语言功能,同时还添加可选静态类型检查、枚举数据类型、类和接口。...要键入元组,而不是键入数组时,我们将元素类型包装在 [] 中,并用逗号分隔它们。...稍后在同一代码中,我们可以将代码设置为一个数字: code = 35; 但后来我们可以将它分配给一个数组: code = [12345]; 我们甚至可以将它重新分配给一个对象: code = {}; 如果稍后在代码中...我们可以将 never 类型视为不可能类型,因为此时该变量不能有值。 Object 对象类型表示任何不是原始类型类型。...这意味着它不是以下类型之一: number string boolean bigint symbol null undefined 对象类型通常用于描述对象字面量,因为可以将任何对象字面量分配给它: const

3.7K10
  • 类型声明,分类与使用

    使用时ES不能低于2020,任意精度整数类型,用于表示大于 Number.MAX_SAFE_INTEGER(即 2^53 - 1)整数。...let b : bigint =1nsymbol符号类型,用于表示唯一标识符,通常用于对象属性// 创建一个 symbol 类型值let sym: symbol = Symbol('mySymbol...');// 创建一个对象,并使用 symbol 作为属性let obj: { [key: symbol]: string } = {};obj[sym] = 'Hello, symbol!'...;// 尝试使用普通字符串作为来访问该属性会失败console.log(obj['mySymbol']); // undefined,因为属性symbol 类型,不是字符串// 使用正确 symbol...'XiaoMu'};// 下面这行代码将会引发错误,因为 id 是只读,不能被修改// person.id = 2;索引签名如果不确定对象会有哪些属性,如果知道它们类型,可以使用索引签名。

    6700

    JavaScript和TypeScript中symbol

    symbol 是 JavaScript 和 TypeScript 中原始数据类型,可用于对象属性。与 numberstring 相比,symbol 具有一些独特功能,使它脱颖而出。...为了允许所有符号扩展我们对象,可以使用 symbol 类型: const sym = Symbol('foo') function extendObject(obj: any, sym: symbol...这实际上意味着你不能将字符串值分配给 enum 类型,因为 TypeScript 会将它们视为唯一: enum Colors { Red = 'Red', Green = 'Green',...我们将“枚举对象声明为 as const。有了它,TypeScript 就会将类型设置为允许每个符号,只允许我们定义完全相同符号。 这允许我们在为函数声明定义符号“枚举”时获得更多类型安全性。...我们从辅助类型开始,从对象中获取所有值类型

    1.4K20

    【Vue3+TypeScript】CRM系统项目搭建之 — 关于拥抱 TypeScript 这件事【上】

    100 //警告:不能类型number分配给类型string” b = 666 b = '你好'//警告:不能类型string分配给类型number” c = true c = 666...类型总览 JavaScript 中数据类型stringnumber 、 boolean 、 null 、 undefined 、 bigint 、 symbol 、 object 备注:其中...”分配给类型“object” a = '你好' // 警告:不能类型string分配给类型“object” Object 含义: Object 实例对象,限制范围太⼤了,⼏乎不⽤。...实例 a = '你好' // “你好”不是Object实例对象,但其包装对象是Object实例 // 以下代码均有警告 a = null // 警告:不能类型“null”分配给类型“Object...et t: [string,number] t = ['hello',123] // 警告,不能类型“[string, number, boolean]”分配给类型“[string, number]”

    11610

    前端系列11集-ES6 知识总结

    = 123 属性遍历 for...in 遍历对象自身和继承枚举属性,不含 Symbol 属性 Object.keys 返回一个数组,包括对象自身(不含继承)所有可枚举属性(不含 Symbol...返回一个数组,包含对象自身所有 Symbol 属性键名 Reflect.ownKeys 返回一个数组,包含对象自身(不含继承)所有键名,不管键名是 Symbol 或字符串,也不管是否可枚举...首先遍历所有数值数值升序排列其次遍历所有字符串加入时间升序排列最后遍历所有 Symbol 加入时间升序排列 super 关键字 指向当前对象原型对象,只能用在对象方法之中使用 扩展运算符...,在块级作用域之外不可引用 let 可以修改 const 不可修改 基本类型保证值不可变等同于常量 引用类型保证内存指针不可变 Symbol原始数据类型,表示独一无二值 注意点 Symbol 函数前不能使用...new 命令 Symbol 函数参数只是表示对当前 Symbol描述,相同参数 Symbol 函数返回值是不相等 Symbol不能与其他类型值进行运算 Symbol 值可以显式转为字符串和布尔值

    16920

    JavaScript 高级程序设计(第 4 版)- 语言基础

    次之 # 数据类型 简单数据类型(原始类型): Undefined, Null, Boolean, Number, StringSymbol 复杂数据类型: Object # typeof 用于确定任意变量数据类型...返回值 "undefined" "boolean" "string" "number" "object" 值为对象或者null "function" "symbol" # undefined var...() 返回对象实例Symbol属性数组 Object.getOwnPropertyDescriptors() 返回同时包含常规和Symbol属性描述符对象 Reflect.ownKeys() 返回两种类型...循环时,会调用以Symbol.asyncIterator为函数,并期望这个函数返回一个实现迭代器API对象。...; expression; post-loop-expression) statement for-in 一种严格迭代语句,用于枚举对象非符号属性 for (property in expression

    50610

    TypeScript一些知识点

    TypeScript原始类型 TypeScript常见原始类型有: boolean string number bigint symbol undefined null void 枚举类型 字面量类型...这里原始类型都是小写,如下: const a: bigint = 1n; const b: number = 1n; // 报错,因为bigint不能算作number类型 symbol symbol...枚举类型 TS中枚举实际上会编译为对象: enum Direction { UP, DOWN, LEFT, RIGHT, } // 实际编译为: var Direction; (function...看一个稍微复杂一点例子: const a: 'a' = 'a'; // 注意这里类型使用了 'a' 而不是string, 如果是string不能用在对象中作为属性 const b: unique...接口可以继承其他接口、类等对象类型。而类型别名不能继承(但可以通过交叉类型 & 来实现类似的功能); 错误提醒对类型别名引用对应类型,而接口引用接口名。

    10210

    TS 进阶 - 类型基础

    { name: 'Cell', age: 18, male: true }; 对对象描述: 每一个属性值必须一一对应到接口属性类型 不能有多属性,也不能有少属性。...数组与元组层面也有只读修饰 不过只能将整个数组或元组标记为只读,不能对象标记特定属性 一旦被标记只读,那被标记数组或元组类型上,将不再有 push、pop 等方法 本质是只读数组或元组类型实际上变成了...在 TypeScript 中,symbol 类型并不具有这一特性,多个具有 symbol 类型对象,它们 symbol 类型都是 TypeScript 中同一个类型。...在编译时同样会被移除,同时也是被存储在内存中类型空间而非值空间。 # 枚举 如果说字面量类型是对原始类型进一步扩展,那么某些方面枚举类型就是对对象类型进一步扩展。...TypeScript 中可以同时使用字符串枚举值和数字枚举值: enum Mixed { Num = 1, Str = 'str', } 枚举对象重要差异在于,对象是单向映射,只能从映射到键值

    1.8K50

    ES6之symbol

    Symbol引入 所以为了保证变量唯一性,ES6在原本6中基础数据类型(Undefined、Null、Boolean、StringNumber、Object)下中引入了Symbol类型,它是独一无二...SymbolSymbol值通过Symbol函数生成,由于生成值是一个原始类型,不是对象,所以不能使用new关键字,否则会报错。Symbol值是唯一,不会和其他属性名产生冲突。...比如Symbol.split会在该对象String.prototype.split调用时触发,而Symbol.itertor指向函数会在使用for...of遍历这个对象时候触发。...如果你要用 Symbol 来表示私有字段,那你需要表明哪些属性不能被公开访问,如若有人试图违背这一规则,理应承担相应后果。 创建枚举类型 枚举允许你定义具有语义名称和唯一值常量。...假定 Symbol 值不同,它们能为枚举类型提供最好值。

    53040

    ES6语法

    const FOO=Object.freeze({a:1,b:2}) 冻结对象本身不能添加属性,不能修改属性类型 冻结数组本身不能添加元素,不能修改元素类型 //Object.keys(...(x)x为小数报错,x为NAN报错 Boolean String Number可以将大整数转换 运算与Number一致,除以运算舍弃小数10n/3n=3n; 可用于比较1n<2 true ""+...,包含对象自身所有的Symbol属性键名 Reflect.ownKeys(obj);返回一个数组,包含对象自身(不含继承)所有键名,不管键名是Symbol或字符串,也不管是否可枚举 首先遍历所有数值...2、WeakSet成员只能是对象,而不能是其他类型值 3、WeakSet中对象都是弱引用,即垃圾回收机制不考虑WeakSet对该对象引用。...,用于不同Symbol之间区分,获取这个参数描述:s.description Symbol可以转换字符串和布尔值 Symbol对象属性 Symbol对象属性不能用.访问 Symbol设置属性时要用

    11810

    一篇文章搞懂TypeScript

    原始数据类型 字符串 数值 布尔 null undefined Symbol BigInt let str: string = '周小黑' let age: number = 18 let beautiful...、never是所有类型类型 Object、object、{} Object:原始对象类型,支持所有类型,注意为非原始数据类型不能访问值任何属性 object:普通对象类型,只能是非原始数据类型对象...、数组、函数这些,我们不能访问值任何属性 {}:对象字面量,无自身属性对象类型不能进行属性操作 let num: Object = 12 let girl: Object = { age: 18...keyof ts 2.1 版本中引入,用于获取某种类型所有,返回是联合类型(跟我们用 Object.keys 获取对象所有属性类似,只不过 Object.keys 返回是所有键名数组)。...获取到类型后,我们就可以访问到对应类型: interface Person { name: string, age: number } type Name = Person['

    13010

    Object对象

    假如认为对于基本数据类型也有浅拷贝与深拷贝概念的话,那么对于基本数据类型拷贝可以理解为值深拷贝,那么关于Object.assign第一层是深拷贝,第二层及以后是浅拷贝说法也是没有问题。...,一个被冻结对象再也不能被修改,冻结了一个对象不能向这个对象添加新属性,不能删除已有属性,不能修改该对象已有属性枚举性、可配置性、可写性,以及不能修改已有属性值。...,包括不可枚举属性但不包括Symbol值作为名称属性组成数组。...示例 obj.hasOwnProperty(prop) prop: 要检测属性String字符串形式表示名称,或者Symbol。...Object 默认情况下是对象本身。 String 字符串值。 示例 obj.valueOf() 返回值为该对象原始值。

    2.3K10

    手写源码系列(三)——JSON.parse和JSON.stringfy

    非数组对象属性不能保证以特定顺序出现在序列化后字符串中。 布尔值、数字、字符串包装对象在序列化过程中会自动转换成对应原始值。...undefined、任意函数以及 symbol 值,在序列化过程中会被忽略(出现在非数组对象属性值中时)或者被转换成 null(出现在数组中时)。...对包含循环引用对象对象之间相互引用,形成无限循环)执行此方法,会抛出错误。 所有以 symbol 为属性属性都会被完全忽略掉,即便 replacer 参数中强制指定包含了它们。...其他类型对象,包括Map/Set/weakMap/weakSet,仅会序列化可枚举属性。...} } ); // undefined // 不可枚举属性默认会被忽略: JSON.stringify( Object.create( null

    2.8K20

    JavaScript对象属性是有序吗?

    最近有人问我,JavaScript对象属性是否一定是无序、不可预测?...自身 Symbol 属性,创建时间顺序递增 const obj = { [Symbol('a')]: 'a', [Symbol.for('b')]: 'b', }; obj[Symbol('...(Object.getOwnPropertySymbols(obj)); // [ Symbol(a), Symbol(b), Symbol(c) ] Symbol 属性和 String 属性一样,是按照属性创建时间顺序升序排列...但是Object.key, for...in, Object.getOwnPropertyNames方法不能获得对象 Symbol 属性,Reflect.ownKeys和 Object.getOwnPropertySymbols...总结 当一个对象属性是上述类型组合时,该对象非负整数(可枚举和不可枚举)首先按升序添加到数组中,然后按插入顺序添加字符串。最后,Symbol 按插入顺序加入。

    1.4K30

    JavaScript 学习-25.Symbol 类型

    Symbol 简介 JavaScript 提供了7种基本数据类型NumberString 、 Boolean 、 Object、 null 和 undefined ,还有 Symbol Symbol...是原始数据类型,不是对象,所以Symbol 函数栈不能用 new 命令 创建一个Symbol值 let s = Symbol('hello'); Symbol() 函数接受一个可选参数作为描述, 注意仅仅只是描述...Symbol 作为对象属性 对象属性只能是字符串,并且属性不能重复,可以用symbol作为对象 const name = Symbol(); const obj = { [name]:...(Object.keys(obj)); // ['address'] Object.keys()无法获取到 symbol 类型, 因为Symbol 是ES6 中新添加类型。...Symbol作为对象属性名时,不能使用点运算符,使用点运算符后,这个属性名就是一个普通字符串了,而不是Symbol类型

    27920
    领券