当前位置: 首页 > article >正文

02. 基本类型

02. 基本类型1. 概述TypeScript 的核心特性是静态类型系统。基本类型是 TypeScript 类型系统的基础包括 JavaScript 原有的原始类型和 TypeScript 新增的特殊类型。// TypeScript 类型系统概览┌─────────────────────────────────────────────────────────────┐ │ TypeScript 类型系统 │ ├─────────────────────────────────────────────────────────────┤ │原始类型(Primitive Types)│ │ ├──string-字符串 │ │ ├──number-数字整数、浮点数、NaN、Infinity │ │ ├──boolean-布尔值 │ │ ├──null-空值 │ │ ├──undefined-未定义 │ │ ├──symbol-唯一值ES6 │ │ └── bigint-大整数ES2020 │ │ │ │ 特殊类型 │ │ ├──any-任意类型关闭类型检查 │ │ ├──unknown-未知类型类型安全的any │ │ ├──void-无返回值 │ │ ├──never-永远不会发生的类型 │ │ └── object-非原始类型 │ │ │ │ 复合类型 │ │ ├── array-数组 │ │ ├── tuple-元组 │ │ └──enum-枚举 │ └─────────────────────────────────────────────────────────────┘2. 原始类型2.1 string字符串// 字符串类型letname:stringTypeScript;letgreeting:stringHello, World!;lettemplate:stringHello,${name}!;// 模板字符串// 类型推断letmessageHello;// 自动推断为 string 类型// message 123; // ❌ 错误不能将 number 赋值给 string2.2 number数字// 数字类型整数、浮点数、十六进制、二进制、八进制letinteger:number42;letfloat:number3.14;lethex:number0xff;// 十六进制 (255)letbinary:number0b1010;// 二进制 (10)letoctal:number0o744;// 八进制 (484)letinfinity:numberInfinity;letnan:numberNaN;// 类型推断letcount100;// 自动推断为 number// count 100; // ❌ 错误2.3 boolean布尔值// 布尔类型letisDone:booleanfalse;letisEnabled:booleantrue;// 类型推断letisLoadingfalse;// 自动推断为 boolean// isLoading true; // ❌ 错误2.4 null 和 undefined// null 和 undefined 是所有类型的子类型strict 模式下除外letu:undefinedundefined;letn:nullnull;// 严格模式下null/undefined 只能赋值给自身或 anyletname:stringTypeScript;// name null; // ❌ 严格模式下错误// 联合类型可以包含 null/undefinedletmaybeName:string|nullTypeScript;maybeNamenull;// ✅ 允许2.5 symbol唯一值// Symbol 类型用于创建唯一标识符letsym1:symbolSymbol(key);letsym2:symbolSymbol(key);console.log(sym1sym2);// false每个 Symbol 都是唯一的// 作为对象属性键constKEYSymbol();constobj{[KEY]:value};2.6 bigint大整数// bigint 用于表示任意精度的整数ES2020letbigNumber:bigint9007199254740991n;letanother:bigintBigInt(9007199254740991);// 注意bigint 和 number 不能混用letnum:number100;// let result num bigNumber; // ❌ 错误类型不匹配3. 复合类型3.1 array数组// 两种定义方式letnumbers:number[][1,2,3,4,5];letstrings:Arraystring[a,b,c];// 混合类型数组使用联合类型letmixed:(number|string)[][1,two,3,four];// 只读数组letreadOnly:readonlynumber[][1,2,3];// readOnly[0] 10; // ❌ 错误只读数组不能修改// 类型推断letfruits[apple,banana];// 自动推断为 string[]3.2 tuple元组元组是固定长度和固定类型的数组。// 定义元组固定长度、固定类型顺序letperson:[string,number][Alice,25];// 访问元素letname:stringperson[0];// Aliceletage:numberperson[1];// 25// 元组越界访问TypeScript 会阻止// let extra person[2]; // ❌ 错误索引 2 超出长度// 可选元素letoptionalTuple:[string,number?][Alice];optionalTuple[Bob,30];// 也可以有两个元素// 剩余元素可变长度typeStringNumberBooleans[string,number,...boolean[]];lettuple:StringNumberBooleans[hello,42,true,false];3.3 enum枚举枚举用于定义一组命名的常量。// 数字枚举默认从 0 开始enumDirection{Up,// 0Down,// 1Left,// 2Right// 3}letdir:DirectionDirection.Up;console.log(dir);// 0// 自定义起始值enumStatus{Pending1,Approved2,Rejected3}// 字符串枚举enumColor{RedRED,GreenGREEN,BlueBLUE}// 异构枚举混合数字和字符串不推荐enumMixed{No0,YesYES}// 常量枚举编译时内联性能更好constenumLogLevel{ErrorERROR,WarnWARN,InfoINFO}// 编译后直接替换为值4. 特殊类型4.1 any任意类型any关闭类型检查可以赋任何值。letflexible:any42;flexiblestring;// ✅ 允许flexibletrue;// ✅ 允许flexible{key:value};// ✅ 允许flexible.unknownMethod();// ✅ 运行时才报错// 使用 any 会失去类型安全应尽量避免// 适用场景// 1. 迁移 JavaScript 代码时// 2. 处理动态内容// 3. 第三方库没有类型定义4.2 unknown未知类型unknown是类型安全的any必须先进行类型检查才能使用。letuserInput:unknownhello;// 不能直接使用// userInput.toUpperCase(); // ❌ 错误unknown 不能直接调用方法// 需要先进行类型收窄if(typeofuserInputstring){console.log(userInput.toUpperCase());// ✅ 安全}// 类型断言letstruserInputasstring;// 使用类型守卫functionisString(value:unknown):valueisstring{returntypeofvaluestring;}if(isString(userInput)){console.log(userInput.toUpperCase());}4.3 void无返回值// void 表示函数没有返回值functionlogMessage(message:string):void{console.log(message);// 没有 return 或 return undefined}// 变量可以赋值为 undefined 或 null非严格模式下letunusable:voidundefined;4.4 never永不返回never表示永远不会发生的类型。// 抛出错误的函数functionthrowError(message:string):never{thrownewError(message);}// 无限循环的函数functioninfiniteLoop():never{while(true){// 永远不会结束}}// 详尽性检查functionassertNever(x:never):never{thrownewError(Unexpected value: x);}// 在联合类型中使用typeShapecircle|square;functiongetArea(shape:Shape){switch(shape){casecircle:returnMath.PI*1;casesquare:return1*1;default:returnassertNever(shape);// 如果 shape 类型被扩展这里会报错}}4.5 object对象类型// object 表示非原始类型letobj:object{name:TypeScript};obj[1,2,3];// ✅ 数组也是对象obj(){};// ✅ 函数也是对象// 不能是原始类型// obj string; // ❌ 错误// obj 123; // ❌ 错误// 更精确的对象类型letperson:{name:string;age:number}{name:Alice,age:25};5. 类型推断TypeScript 能自动推断变量类型无需显式标注。// 变量类型推断letmessageHello;// 推断为 stringletcount42;// 推断为 numberletisValidtrue;// 推断为 boolean// 函数返回值推断functionadd(a:number,b:number){returnab;// 推断返回类型为 number}// 最佳通用类型letarr[1,string,true];// 推断为 (number | string | boolean)[]// 上下文类型推断window.onmousedownfunction(mouseEvent){console.log(mouseEvent.button);// mouseEvent 自动推断为 MouseEvent};6. 完整示例// 综合示例用户管理系统// 枚举定义用户角色enumUserRole{AdminADMIN,UserUSER,GuestGUEST}// 用户类型定义interfaceUser{id:number;name:string;email:string;role:UserRole;isActive:boolean;createdAt:Date;}// 函数创建用户functioncreateUser(name:string,email:string,role:UserRoleUserRole.User):User{return{id:Date.now(),name,email,role,isActive:true,createdAt:newDate()};}// 函数更新用户状态functionupdateUserStatus(user:User,isActive:boolean):User{return{...user,isActive};}// 函数获取用户信息可能不存在functiongetUserById(id:number):User|null{// 模拟查找if(id1){returncreateUser(Alice,aliceexample.com);}returnnull;}// 使用示例constnewUsercreateUser(Bob,bobexample.com,UserRole.Admin);console.log(newUser);constupdatedUserupdateUserStatus(newUser,false);console.log(updatedUser);constfoundUsergetUserById(1);if(foundUser){console.log(Found:${foundUser.name});}else{console.log(User not found);}7. 类型速查表类型语法示例值字符串stringhello数字number42,3.14布尔booleantrue,false数组type[]或Arraytype[1, 2, 3]元组[type1, type2][Alice, 25]枚举enum Name { A, B }Name.A任意any任何值未知unknown任何值需检查空voidundefined永不never无空值nullnull未定义undefinedundefined对象object{}SymbolsymbolSymbol()大整数bigint9007199254740991n8. 总结要点说明原始类型string、number、boolean、null、undefined、symbol、bigint复合类型array、tuple、enum特殊类型any、unknown、void、never、object类型推断TypeScript 自动推断变量类型最佳实践优先使用unknown而非any

相关文章:

02. 基本类型

02. 基本类型 1. 概述 TypeScript 的核心特性是静态类型系统。基本类型是 TypeScript 类型系统的基础,包括 JavaScript 原有的原始类型和 TypeScript 新增的特殊类型。 // TypeScript 类型系统概览 ┌──────────────────────────────…...

从数学建模到流畅体验:smooth-signature如何重塑电子签名技术范式

从数学建模到流畅体验:smooth-signature如何重塑电子签名技术范式 【免费下载链接】smooth-signature H5带笔锋手写签名,支持PC端和移动端,任何前端框架均可使用 项目地址: https://gitcode.com/gh_mirrors/smo/smooth-signature 在数…...

华硕笔记本终极性能优化方案:G-Helper轻量级控制工具完全指南

华硕笔记本终极性能优化方案:G-Helper轻量级控制工具完全指南 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenb…...

BS-RoFormer:音频分离技术的革命性突破,从混合音乐中提取纯净音轨的终极指南

BS-RoFormer:音频分离技术的革命性突破,从混合音乐中提取纯净音轨的终极指南 【免费下载链接】BS-RoFormer Implementation of Band Split Roformer, SOTA Attention network for music source separation out of ByteDance AI Labs 项目地址: https:/…...

在VS Code中结合Taotoken API快速构建代码辅助工具

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 在VS Code中结合Taotoken API快速构建代码辅助工具 对于希望提升编码效率的开发者而言,将AI能力深度集成到日常开发环境…...

CANN/asc-devkit:__float2float_rn类型转换函数

__float2float_rn 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。 项目地址: https://gitco…...

Windows字体自定义终极指南:用No!! MeiryoUI轻松美化系统界面

Windows字体自定义终极指南:用No!! MeiryoUI轻松美化系统界面 【免费下载链接】noMeiryoUI No!! MeiryoUI is Windows system font setting tool on Windows 8.1/10/11. 项目地址: https://gitcode.com/gh_mirrors/no/noMeiryoUI 还在为Windows系统千篇一律的…...

go-jsonnet实际应用案例:Kubernetes配置管理与微服务架构

go-jsonnet实际应用案例:Kubernetes配置管理与微服务架构 【免费下载链接】go-jsonnet 项目地址: https://gitcode.com/gh_mirrors/go/go-jsonnet 在现代云原生应用开发中,Kubernetes配置管理和微服务架构的复杂性常常让开发者头疼。go-jsonnet作…...

Deskreen:如何将任何浏览器设备变成你的第二屏幕?

Deskreen:如何将任何浏览器设备变成你的第二屏幕? 【免费下载链接】deskreen Deskreen turns any device with a web browser into a secondary screen for your computer. ⭐️ Star to support our work! 项目地址: https://gitcode.com/gh_mirrors/…...

dvcs-ripper快速入门:5分钟掌握Git仓库提取技巧 [特殊字符]

dvcs-ripper快速入门:5分钟掌握Git仓库提取技巧 🚀 【免费下载链接】dvcs-ripper Rip web accessible (distributed) version control systems: SVN/GIT/HG... 项目地址: https://gitcode.com/gh_mirrors/dv/dvcs-ripper dvcs-ripper 是一个强大的…...

ElevenLabs广东话语音商用避坑清单:92%开发者忽略的版权边界、方言标注规范与GDPR合规红线

更多请点击: https://kaifayun.com 第一章:ElevenLabs广东话语音商用落地的现实困局 ElevenLabs 作为全球领先的AI语音生成平台,其英语、西班牙语等主流语言模型已广泛应用于客服、播客与教育场景。然而,当尝试将其语音合成能力延…...

Gev入门指南:5分钟快速搭建高性能TCP服务器

Gev入门指南:5分钟快速搭建高性能TCP服务器 【免费下载链接】gev 🚀Gev is a lightweight, fast non-blocking TCP network library / websocket server based on Reactor mode. Support custom protocols to quickly and easily build high-performance…...

OpenPose编辑器:解锁AI绘画中人体姿态的精准控制秘诀 [特殊字符]

OpenPose编辑器:解锁AI绘画中人体姿态的精准控制秘诀 🎨 【免费下载链接】openpose-editor Openpose Editor for AUTOMATIC1111s stable-diffusion-webui 项目地址: https://gitcode.com/gh_mirrors/op/openpose-editor 在AI绘画创作的世界里&…...

Midjourney印象派商业级应用白皮书(含版权合规清单):广告/出版/IP衍生必备的5类授权边界判定法

更多请点击: https://kaifayun.com 第一章:Midjourney印象派商业级应用白皮书导论 Midjourney 不仅是生成式AI图像工具,更是一种可嵌入品牌视觉系统、广告创意链路与数字内容工业化流程的视觉协作者。其“印象派”风格能力——强调光色律动、…...

体验Taotoken官方折扣与Token Plan带来的实际费用节省

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 体验Taotoken官方折扣与Token Plan带来的实际费用节省 对于开发者个人或小团队而言,在项目开发或日常工作中使用大模型…...

为什么 HDFS 文件一旦写入就不能修改,只能追加或删除(HDFS 设计哲学:一次写入,多次读取)

HDFS采用"一次写入,多次读取"的设计哲学,不支持文件内容修改。这种设计通过简化数据一致性机制、提高吞吐量和优化批处理场景性能,实现了高效的大数据处理。虽然不能直接修改文件,但支持追加、删除和覆盖操作。Hive等工…...

5分钟学会LDDC:让每一首歌都有完美歌词的终极指南

5分钟学会LDDC:让每一首歌都有完美歌词的终极指南 【免费下载链接】LDDC 简单易用的精准歌词(逐字歌词/卡拉OK歌词)下载匹配工具|A simple and user-friendly tool for downloading and matching precise lyrics (word-by-word lyrics/Karaoke lyrics) 项目地址: …...

YOLOv8无人机红外识别检测系统(项目源码+YOLO数据集+模型权重+UI界面+python+深度学习+环境配置)

摘要 面向无人机平台的红外目标检测在夜间及低能见度环境下具有重要应用价值。本文基于YOLOv8构建了一套针对车辆与行人的红外检测系统,数据集包含4类目标(Car、DontCare、OtherVehicle、Person),共计10128张训练图像、715张验证…...

element-plus主题换色

提示:本篇暂未完善全,仅仅提供思路 具体的实现可以参考我这篇文章,验证可行:推荐使用该链接方式实现换色 主题方式是通过切换主题的方式实现换色,例如blue、green,不推荐,仅参考逻辑。 原因&a…...

长期使用 Taotoken Token Plan 套餐在成本控制方面的实际感受

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 长期使用 Taotoken Token Plan 套餐在成本控制方面的实际感受 1. 从按需付费到计划订阅的转变 最初接触 Taotoken 时,…...

Circuit实战教程:10分钟构建你的第一个Compose应用

Circuit实战教程:10分钟构建你的第一个Compose应用 【免费下载链接】circuit ⚡️ A Compose-driven architecture for Kotlin and Android applications. 项目地址: https://gitcode.com/gh_mirrors/cir/circuit Circuit是一个基于Compose驱动的Kotlin和And…...

终极指南:如何在Windows上简单快速实现SSH远程文件系统挂载

终极指南:如何在Windows上简单快速实现SSH远程文件系统挂载 【免费下载链接】sshfs-win SSHFS For Windows 项目地址: https://gitcode.com/gh_mirrors/ss/sshfs-win SSHFS-Win是一个革命性的开源工具,它让你能够在Windows操作系统中通过SSH协议直…...

Linux查看文件内容

🏷️ 标签:Linux 查看文件 文件类型 Linux命令 运维 后端开发 📝 适用人群:Linux 新手、运维、后端、学生、实训使用 💡 亮点:包含 查看文件类型 查看整个文件 查看部分文件,结构清晰、示例可…...

KaTrain终极指南:用AI围棋教练快速提升你的棋艺水平

KaTrain终极指南:用AI围棋教练快速提升你的棋艺水平 【免费下载链接】katrain Improve your Baduk skills by training with KataGo! 项目地址: https://gitcode.com/gh_mirrors/ka/katrain 你是否曾经在对局后感到困惑,不知道自己的失误究竟在哪…...

如何用嘎嘎降AI处理汉语言文学论文:文学类毕业论文降AI免费完整操作教程

如何用嘎嘎降AI处理汉语言文学论文:文学类毕业论文降AI免费完整操作教程 帮同学处理过汉语言文学论文降AI教程,流程基本是固定的,记录下来供参考。 主推工具:嘎嘎降AI(www.aigcleaner.com),4.…...

Hertz.dev实时音频对话实战:构建智能语音助手的最佳实践指南

Hertz.dev实时音频对话实战:构建智能语音助手的最佳实践指南 【免费下载链接】hertz-dev first base model for full-duplex conversational audio 项目地址: https://gitcode.com/gh_mirrors/he/hertz-dev Hertz.dev是一个开创性的全双工会话音频基础模型&a…...

如何快速掌握ncmdump:网易云音乐NCM格式解密完整指南

如何快速掌握ncmdump:网易云音乐NCM格式解密完整指南 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 你是否曾为网易云音乐的NCM加密格式而烦恼?精心收藏的音乐无法在其他播放器中使用?ncmdump正是…...

OpenClaw 本地部署避坑指南|环境配置 + 故障排查全流程

🦞 OpenClaw 本地部署避坑指南|环境配置 故障排查全流程 开源 AI 自动化工具OpenClaw(小龙虾) 凭借本地私有化部署、无侵入系统交互、全流程自动化执行等核心特性,在开发者社区快速普及。轻量化架构与高扩展性&#…...

如何用嘎嘎降AI处理心理学论文:心理学研究生毕业论文降AI4.8元完整操作教程

如何用嘎嘎降AI处理心理学论文:心理学研究生毕业论文降AI4.8元完整操作教程 关于心理学论文降AI教程,有几个细节提前知道能少走很多弯路。 核心用嘎嘎降AI(www.aigcleaner.com),4.8元,达标率99.26%。这篇…...

3分钟搞定百度网盘提取码:新手也能快速上手的终极解决方案

3分钟搞定百度网盘提取码:新手也能快速上手的终极解决方案 【免费下载链接】baidupankey 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否经常遇到这样的烦恼:朋友分享的百度网盘链接明明就在眼前,却因为缺少那个关…...