[TypeScript] 编程实践之1: Google的TypeScript代码风格9:枚举

LLM辅助编程下Python、TypeScript、Go的协作效能对比 在AI原生开发范式中,大语言模型(LLM)已成为程序员的‘认知副驾驶’,而编程语言不再仅比拼运行性能,更关键的是其对LLM输出的承接能力——即提示词理解保真度、错误反馈闭环速度、上下文感知重构能力与人机协作熵值。Python凭借动态表达力支持快速原型,但类型模糊易放大LLM幻觉;TypeScript依托强类型系统提供精准契约约束,显著提升首次生成可用率;Go以确定性语法和明确错误信息保障修复效率,却受限于表达简洁性。三者分别代表‘表达优先’‘契约优先’‘确定性优先’三种人机协同范式,适配不同AI工程场景:数 阅读详情

9 枚举

枚举类型是Number原语类型的独特子类型,具有一组关联的命名常量,这些常量定义了枚举类型的可能值。

9.1 枚举声明

枚举声明声明一个枚举类型和一个枚举对象。

EnumDeclaration:
	constopt enum BindingIdentifier { EnumBodyopt }

EnumDeclaration在包含的声明空间中引入了命名类型(枚举类型)和命名值(枚举对象)。 枚举类型是Number原语类型的独特子类型。 枚举对象是一个匿名对象类型的值,其中包含一组属性(所有枚举类型),这些属性与声明主体中为枚举类型声明的值相对应。 枚举对象的类型还包括带有数字签名[[x:number]:string’的数字索引签名。

枚举声明的BindingIdentifier可能不是预定义的类型名称之一(第3.8.1节)。

当枚举声明包含const修饰符时,它被称为常量枚举声明。 常量枚举声明的成员都必须具有可以在编译时计算的常量值。 常量枚举声明将在9.4节中讨论。

这个例子

enum Color { Red, Green, Blue }

声明Number原始类型的子类型称为“ Color”,并引入一个变量“ Color”,其类型与声明相对应

var Color: {  
    [x: number]: string;  
    Red: Color;  
    Green: Color;  
    Blue: Color;  
};

数字索引签名反映了在每个枚举对象中自动生成的“反向映射”,如第9.5节所述。 反向映射提供了一种获取枚举值的字符串表示形式的便捷方法。 例如

var c = Color.Red;  
console.log(Color[c]);  // Outputs "Red"

9.2 枚举成员

枚举声明的主体定义了零个或多个枚举成员,这些成员是枚举类型的命名值。 每个枚举成员都有一个由枚举声明引入的原始类型的关联数值。

EnumBody:
	EnumMemberList ,opt

EnumMemberList:
	EnumMember
	EnumMemberList , EnumMember

EnumMember:
	PropertyName
	PropertyName = EnumValue

EnumValue:
	AssignmentExpression

枚举成员的PropertyName不能是计算的属性名称(2.2.3)。

枚举成员可以是常量成员,也可以是计算成员。常量成员具有已知的常量值,该值将替换生成的JavaScript代码中对成员的引用。计算成员具有在运行时计算的值,而在编译时未知。不会对引用的计算成员执行替换。

枚举成员的分类如下:

  • 如果成员声明未指定任何值,则该成员被视为常量枚举成员。如果该成员是枚举声明中的第一个成员,则将其赋值为零。否则,将前一个成员的值加1,并且如果前一个成员不是常量枚举成员,则会发生错误。
  • 如果成员声明指定了可以归为常量枚举表达式(如下定义)的值,则该成员被视为常量枚举成员。
  • 否则,该成员被视为计算枚举成员。

枚举值表达式的类型必须为Any,Number基本类型或枚举类型本身。

常量枚举表达式是表达式语法的子集,可以在编译时对其进行全面评估。如果表达式是下列之一,则将其视为常量枚举表达式:

  • 数字文字。
  • 表示同一常量枚举声明中先前声明的成员的标识符或属性访问。
  • 带括号的常量枚举表达式。
  • +,–或〜一元运算符应用于常量枚举表达式。
  • +,–,*,/,%,<<,>>,>>>,&,^或| 运算符应用于两个常量枚举表达式。

在这个例子中

enum Test {  
    A,  
    B,  
    C = Math.floor(Math.random() * 1000),  
    D = 10,  
    E  
}

“ A”,“ B”,“ D”和“ E”是常数成员,分别具有值0、1、10和11,而“ C”是计算成员。

在这个例子中

enum Style {  
    None = 0,  
    Bold = 1,  
    Italic = 2,  
    Underline = 4,  
    Emphasis = Bold | Italic,  
    Hyperlink = Bold | Underline  
}

所有成员都是常任理事国。 注意,枚举成员声明可以无条件引用其他枚举成员。 同样,由于枚举是Number原语类型的子类型,因此可以使用数字运算符(例如按位OR运算符)来计算枚举值。

9.3 声明合并

枚举是“开放式的”,并且相对于公共根具有相同限定名称的枚举声明(如第2.3节中所定义)定义单个枚举类型并构成单个枚举对象。

一个枚举声明不可能继续另一个枚举的自动编号顺序,并且当一个枚举类型具有多个声明时,只允许一个声明为第一个成员省略一个值。

合并枚举声明时,它们必须全部指定const修饰符或全部不指定const修饰符。

9.4 常量枚举声明

指定const修饰符的枚举声明是常量枚举声明。 在常量枚举声明中,所有成员都必须具有常量值,并且成员声明指定未归类为常量枚举表达式的表达式是错误的。

与常规枚举声明不同,常量枚举声明在生成的JavaScript代码中被完全擦除。 因此,在除选择枚举成员之一的属性访问之外的任何其他上下文中引用常量枚举对象都是错误的。 例如:

const enum Comparison {  
    LessThan = -1,  
    EqualTo = 0,  
    GreaterThan = 1  
}

var x = Comparison.EqualTo;  // Ok, replaced with 0 in emitted code  
var y = Comparison[Comparison.EqualTo];  // Error  
var z = Comparison;  // Error

整个const枚举声明在生成的JavaScript代码中被擦除。 因此,对枚举对象的唯一允许引用是那些被枚举成员值替换的引用。

9.5 代码生成

枚举声明生成的JavaScript等效于以下内容:

var <EnumName>;  
(function (<EnumName>) {  
    <EnumMemberAssignments>  
})(<EnumName>||(<EnumName>={}));

EnumName是枚举的名称。

EnumMemberAssignments是一系列分配,每个枚举成员按声明的顺序分配一个,形式为

<EnumName>[<EnumName>["<MemberName>"] = <Value>] = "<MemberName>";

其中MemberName是枚举成员的名称,而Value是分配的常量值或为计算值表达式生成的代码。

例如,第9.1节中的“颜色”枚举示例生成以下JavaScript:

var Color;  
(function (Color) {  
    Color[Color["Red"] = 0] = "Red";  
    Color[Color["Green"] = 1] = "Green";  
    Color[Color["Blue"] = 2] = "Blue";  
})(Color||(Color={}));
Ecoleta:火箭椅Next Level Week 1.0中的TypeScript环保站查找平台项目 本文还有配套的精品资源,点击获取 简介:Ecoleta是一个TypeScript编写的环保站查找平台,旨在推广可持续发展。它是在火箭椅Next Level Week 1.0活动中创建的,以帮助开发者通过实际项目提升Web开发技能。项目中运用了TypeScript的高级特性,如静态类型、接口、类、泛型和模块,以增强代码的稳定性和可维护性。Ecoleta项目可能包含前端、后端、... 阅读详情

相关推荐

STM32F103移植NuttX实战:从零搭建最小系统到串口Shell(附完整配置文件)

本文详细介绍了在STM32F103C8T6开发板上移植NuttX实时操作系统的完整过程,包括环境搭建、BSP配置、系统时钟初始化、驱动裁剪、编译烧录及串口Shell交互。通过实战指南帮助开发者快速掌握NuttX移植技巧,解决典型问题,适用于嵌入式系统开发。

tree8的博客 292

【TypeScript】枚举类型:详解常见枚举类型的 7 种用法

在 JavaScript 原生语言中并没有与枚举匹配的概念,而 TypeScript 中实现了枚举类型(Enums),这就意味着枚举也是 TypeScript 特有的语法(相对于 JavaScript)。在 TypeScript 中,我们可以使用枚举定义包含被命名的常量的集合,比如 TypeScript 支持数字、字符两种常量值的枚举类型。我们也可以使用 enum 关键字定义枚举类型,格式是 enum + 枚举名字 + 一对花括弧,花括弧里则是被命名了的常量成员。...

吉帅振博客 2512

NUS-WIDE-10K数据集制作

NUS-WIDE是一个多标签数据集,数据集中一共包含26,9648个样本,可以分为81个类。最近在做跨模态检索项目,发现有很多论文里面都用到了NUS-WIDE-10K数据集,但是在网上也没有搜索到相关的数据集下载链接或者是数据集制作代码,所以自己动手写了一个NUS-WIDE-10K数据集的制作代码。 1.介绍 我在网上找到的最早关于NUS-WIDE-10K数据集描述的论文是:Cross-modal Retrieval with Correspondence Autoencoder。描述如下:作者选择了N

weixin_44012382的博客 4200

TypeScript技术系列8:深入理解枚举类型

在TypeScript中,枚举(Enum)是一种用于定义命名常量集的类型。与其他语言一样,枚举类型在构建可靠、可读性高的代码时起着重要作用,尤其是在需要处理一组相关常量的场景中。与普通的JavaScript不同,TypeScript提供了对枚举的直接支持,这使得开发者可以轻松地组织和管理这些常量。文末有 已成功帮助500多人拿到前端offer的文章!!枚举不仅能增强代码的可读性,还能提供类型检查、提高代码的安全性。它们在处理特定值集合时非常有用,例如一周的天数、方向、状态等场景。

2401_86113453的博客 1209

C++动态规划详解

动态规划思想 一、动态规划概念: 动态规划(dp)是研究多步决策过程最优化问题的一种数学方法。在动态规划中,为了寻找一个问题的最优解(即最优决策过程),将整个问题划分成若干个相应的阶段,并在每个阶段都根据先前所作出的决策作出当前阶段最优决策,进而得出整个问题的最优解。即记住已知问题的答案,在已知的答案的基础上解决未知的问题。 在这类问题中,可能会有许多可行解。每一个解都对应于一个值,我们希望找到具有最优值的解。动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后

weixin_51951103的博客 2万+

树莓派视觉小车实战:OpenCV驱动的智能物体追踪系统

本文详细介绍了如何从零开始构建一个基于树莓派的智能视觉小车,实现物体跟踪功能。通过OpenCV进行图像处理,结合颜色与轮廓识别算法,让小车能够实时锁定并追踪特定目标。内容涵盖硬件搭建、软件环境配置、核心代码解析及运动控制逻辑,为创客和开发者提供了完整的实战指南。

weixin_29047545的博客 143

8.TypeScript中的枚举

枚举 使用枚举我们可以定义一些带名字的常量。 使用枚举可以清晰地表达意图或创建一组有区别的用例。 TypeScript支持数字的和基于字符串的枚举。 数字枚举 首先我们看看数字枚举,如果你使用过其它编程语言应该会很熟悉。 enum Direction { Up = 1, Down, Left, Right } 如上,我们定义了一个数字枚举, Up使用初始化为 1。 其余的成员会从 1开始自动增长。 换句话说, Direction.Up的值为 1, Down为 2, Left

sinat_41212418的博客 1388

海康门禁二次开发实战:用Java实现员工考勤系统的人脸权限管理

本文详细介绍了如何利用Java技术栈进行海康威视门禁系统的二次开发,实现员工考勤系统的人脸权限管理。从开发环境准备、SDK集成到设备连接、人脸数据批量处理,再到权限管理与异常处理,全面解析了海康门禁对接开发的关键步骤和最佳实践,助力企业构建高效、安全的智能考勤系统。

weixin_29191669的博客 262

【TypeScript入门】TypeScript入门篇——枚举(enum)

TypeScript是一种静态类型、可选的编程语言,它在JavaScript的基础上添加了类型检查、接口、枚举等新特性,可以让开发更加高效、代码更加健壮。在TypeScript中,枚举是一种特殊的数据类型,它可以用来定义一组命名的常量,让代码更具可读性和可维护性。

看世界,也找自己 5961

SAP Event Mesh 简介

Get Started with Messaging for Decoupled Communication Step 1: What is the SAP Event Mesh service? SAP Event Mesh 是一种完全托管的服务,用于连接应用程序、服务和系统,以便它们可以通过消息和事件相互交互。 它通过引入中央消息代理取代了传统的点对点通信。 虽然点对点通信适用于在有限数量的发送方和接收方之间共享数据,但可扩展性很快就会成为一个问题。 SAP Event Mesh 解决了这个问题,并确保

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1243

YOLOv10改进,YOLOv10添加DICAM,用于水下图像增强模块,以提高朦胧水下图像的质量、对比度和色偏

在水下环境中,成像设备会出现水浑浊、光衰减、散射和颗粒问题,导致图像质量低、对比度差和彩色图像有偏差。这给使用传统视觉技术进行水下状态监测和检查带来了巨大挑战。近年来,水下图像增强因其在提高当前计算机视觉任务在水下目标检测和分割中的性能方面发挥着关键作用而受到越来越多的关注。由于主要从自然场景构建的现有方法在提高色彩丰富度和分布方面存在性能限制,作者提出了一种新颖的基于深度学习的方法,即 Deep Inception 和 Channel-wise Attention Modules (DICAM),以提高朦

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 480

[TypeScript] 编程实践之1: Google的TypeScript代码风格1:介绍

TypeScript语言规范1 介绍1.1 环境声明1.2 函数类型1.3 对象类型1.4 结构子类型化1.5 上下文类型推断1.6 类1.7 枚举类型1.8 字符串参数重载1.9 通用类型和功能1.10 命名空间1.11 模块 版本1.8 2016年1月 Microsoft自2012年10月1日起根据Open Web Foundation最终规范协议版本1.0(“ OWF 1.0”)提供此规范。OWF 1.0可以从http://www.openwebfoundation.org/legal/the-owf

魔豆(Magicbean)的博客 1398

CRC_16---ModBus 计算方法及代码实现

1、 CRC寄存器初始值为 0xFFFF;即16个字节全为1; 2、 CRC-16 / ModBus的多项式0xA001H (1010 0000 0000 0001B) ; ‘H’表示16进制数,‘B’表示二进制数。 计算步骤为: (1).预置 16 位寄存器为十六进制 0xFFFF(即全为 1) ,称此寄存器为 CRC 寄存器; (2).把第一个 8 位数据与 16 位 CRC 寄存器的低位相异或,把结果放于 CRC 寄存器; (3).检测相异或后的CRC寄存器的最低位,若最低位为1,CRC寄存器

1万+

[TypeScript] 编程实践之1: Google的TypeScript代码风格13:语法

TypeScript语言规范A 语法A.1 类型A.2 表达式A.3 语句A.4 函数A.5 接口A.6 类A.7 枚举A.8 命名空间A.9 Script和ModulesA.10 Ambient A 语法 本附录包含在主文档中找到的语法摘要。 如2.1节所述,TypeScript语法是ECMAScript 2015语言规范(特别是ECMA-262标准,第6版)中定义的语法的超集,本附录仅列出从ECMAScript语法中新增或修改的产品。 A.1 类型 TypeParameters: < TypeP

魔豆(Magicbean)的博客 706

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

[TypeScript] 编程实践之1: Google的TypeScript代码风格12:Ambients

TypeScript语言规范12 Ambients12.1 Ambients声明12.1.1 Ambient变量声明12.1.2 Ambient函数声明12.1.3 Ambient类声明12.1.4 Ambient枚举声明12.1.5 Ambient命名空间声明12.2 Ambient模块声明 12 Ambients 环境声明用于在现有JavaScript代码上提供静态类型。 环境声明与常规声明的不同之处在于,不会为它们生成JavaScript代码。 环境声明不是引入新的变量,函数,类,枚举或命名空间,而是

魔豆(Magicbean)的博客 700

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

[TypeScript] 编程实践之1: Google的TypeScript代码风格5:语句

TypeScript语言规范5 语句5.1 块5.2 变量语句5.2.1 简单变量声明5.2.2 析构变量声明5.2.3 implied类型5.3 let和const声明5.4 If,Do和While语句5.5 for语句5.6 for-in语句5.7 For-of语句5.8 Continue语句5.9 Break语句5.10 Return语句5.11 With语句5.12 Switch语句5.13 Throw语句5.14 Try语句 5 语句 本章介绍TypeScript为JavaScript语句提供的静

魔豆(Magicbean)的博客 1371

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

[TypeScript] 编程实践之1: Google的TypeScript代码风格3:类型

TypeScript语言规范3 类型3.1 Any类型3.2 基本类型3.2.1 Number类型3.2.2 Boolean类型3.2.3 String类型3.2.4 Symbol类型3.2.5 Void类型3.2.6 Null类型3.2.7 Undefined类型3.2.8 Enum类型3.2.9 String类型3.3 Object类型3.3.1 命名类型引用3.3.2 Array类型3.3.3 Tuple类型3.3.4 Function类型3.3.5 Constructor类型3.3.6 Member

魔豆(Magicbean)的博客 786

[TypeScript] 编程实践之1: Google的TypeScript代码风格2:基本概念

TypeScript语言规范2 基本概念2.1 语法约定2.2 命名2.2.1 保留字2.2.2 属性命名2.2.3 计算属性命名2.3 声明2.4 范围 2 基本概念 本文档的其余部分是TypeScript编程语言的正式规范,旨在作为ECMAScript 2015 Language Specification(特别是ECMA-262标准,第6版)的附件来阅读。 本文档描述了TypeScript所添加的语法,以及TypeScript编译器执行的编译时处理和类型检查,但是由于ECMAScript规范涵盖了该内

魔豆(Magicbean)的博客 607

Google 编程风格:C++、Python、JavaScript、Shell、TypeScript

Google 编程风格:C++、Python、JavaScript、Shell、TypeScript

freeking101的博客 5万+

[TypeScript] 编程实践之1: Google的TypeScript代码风格4:表达式

TypeScript语言规范4 表达式4.1 值和引用4.2 this关键字4.3 标识符4.4 文法4.5 Object文法4.6 数组文法4.7 模板文法4.8 括弧4.9 super关键字4.9.1 父类super调用4.9.2 父类属性存取4.10 函数表达式4.11 箭头函数4.12 Class表达式4.13 属性存取4.14 new操作算子4.15 函数调用4.15.1 重载解决方案4.15.2 类型参数推导4.15.3 语法歧义4.16 类型断言4.17 JSX表达式4.18 一元运算符4.1

魔豆(Magicbean)的博客 979

TyGo 终极指南:Go 到 TypeScript 类型生成的完整生态与实践

**TyGo** 是一个强大的 Go 到 TypeScript 类型生成工具,专为现代全栈开发而设计。作为 Go 语言生态中的重要桥梁,TyGo 能够自动将 Go 结构体、接口和常量转换为 TypeScript 类型定义,极大提升了前后端开发的一致性和效率。本文将深入探讨 TyGo 的社区生态、相关项目对比以及最佳实践分享,帮助开发者充分利用这一强大工具。 ## 🚀 TyGo 的核心优势与定位

gitblog_01007的博客 391

Typescript简记

概述typescript是微软推出的一门扩展js脚本语言,现在由微软和google在推,google的angular.js的2.0版本以typescript为基础,所以这门语言应该是靠谱的。早期我也经常用node.js, node-webkit,都是用js写,但是里面的各种蛋疼语法挺烦人的,特别是读别人的代码,一坨坨回调,一坨坨函数域变量,头疼。以前typespcript推的时候,因为本能对微软技术

iosJohnson的专栏 2274

Google索引脚本:48小时内加速网站收录的终极解决方案

你是否曾为网站新内容迟迟不被Google收录而烦恼?Google索引脚本正是解决这一痛点的强大工具。这个开源项目利用Google官方API,能够自动化批量提交网站页面,显著提升搜索引擎发现速度,将传统数周甚至数月的索引周期缩短到48小时以内。无论是SEO专家、网站管理员还是内容创作者,都能通过这个工具大幅节省手动操作时间,让网站内容更快获得曝光机会。 [![Google索引脚本执行结果展示](h

gitblog_01022的博客 343

TypeScript

typescript 官网 介绍 ​ TypeScript 是 JavaScript 的一个超集,主要提供了类型系统和对 ES6+ 的支持,让javascript变成强类型语言。它由 Microsoft 开发,代码开源于 GitHub 上。 特点 可以在开发阶段和编译阶段就发现大部分错误,这总比在运行时候出错好 不显式的定义类型,也能够自动做出类型推论 即使 TypeScript 编译报错,也可以生成 JavaScript 文件 Google 开发的 Angular 就是使用 TypeScr

m0_54625720的博客 911

TyGo 入门指南:如何从 Go 代码自动生成 TypeScript 类型定义

TyGo 是一个强大的开源工具,专门用于从 Go 源代码自动生成 TypeScript 类型定义。如果你正在开发全栈应用,需要在 Go 后端和 TypeScript 前端之间保持类型一致性,TyGo 将是你的最佳助手。这个工具能够显著提高开发效率,减少类型错误,确保前后端数据结构的完美同步。 ## 🚀 TyGo 的核心优势 **TyGo** 让 Go 和 TypeScript 之间的类型同步

gitblog_00308的博客 307

TypeScript核心笔记

记录加深印象,可做历史查阅。

yanghuashuiyue的专栏 774
上一篇: [TypeScript] 编程实践之1: Google的TypeScript代码风格8:类
下一篇: [TypeScript] 编程实践之1: Google的TypeScript代码风格10:命名空间
魔豆Magicbean
博客等级 码龄19年 146粉丝 742原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值