news 2026/6/22 20:21:56

TypeScript 循环

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
TypeScript 循环

TypeScript 循环语句详解

TypeScript 的循环语句语法与 JavaScript 完全相同,包括forfor...offor...inwhiledo...while,以及数组的高阶方法(如forEachmap等)。TypeScript 的优势在于类型推断和类型检查,能确保循环中变量的类型安全,尤其在遍历数组、对象或联合类型时。

1. for 循环(经典三段式)

语法:

for(leti=0;i<length;i++){// 代码}

示例:

for(leti:number=0;i<5;i++){console.log(`${i+1}次循环`);}// TS 会自动推断 i 为 number,无需显式注解for(leti=0;i<5;i++){console.log(i*2);}
2. for…of 循环(遍历可迭代对象的值)

最常用在数组、字符串、Set、Map 等可迭代对象上。

constcolors:string[]=["red","green","blue"];for(constcolorofcolors){// color 类型被推断为 stringconsole.log(color.toUpperCase());// 安全调用字符串方法}conststr:string="TypeScript";for(constcharofstr){console.log(char);// char 类型为 string}

优势:简洁、安全,推荐用于数组遍历。

3. for…in 循环(遍历对象的键)

遍历对象的可枚举属性键(包括原型链上的)。

interfaceUser{name:string;age:number;}constuser:User={name:"Alice",age:25};for(constkeyinuser){// key 类型被推断为 keyof User,即 "name" | "age"console.log(`${key}:${user[key]}`);}// 注意:for...in 会遍历原型链,实际使用时常结合 hasOwnProperty 检查for(constkeyinuser){if(Object.hasOwnProperty.call(user,key)){console.log(user[keyaskeyofUser]);}}

注意:不推荐用于数组遍历(会遍历索引作为字符串,可能导致意外)。

4. while 循环
letcount:number=0;while(count<5){console.log(count);count++;}
5. do…while 循环(至少执行一次)
letinput:string="";do{input=prompt("请输入 quit 退出")||"";// 假设浏览器环境}while(input!=="quit");console.log("已退出");
6. 数组高阶方法(推荐在 TS 中优先使用)

这些方法类型安全,且代码更函数式、更易读。

方法用途返回值示例
forEach遍历,无返回值voidarr.forEach(item => console.log(item));
map转换数组新数组arr.map(x => x * 2);
filter过滤新数组arr.filter(x => x > 10);
find查找第一个匹配元素元素或 undefinedarr.find(x => x > 10);
some是否存在匹配booleanarr.some(x => x > 10);
every是否全部匹配booleanarr.every(x => x > 0);
reduce归约(累加、汇总)任意类型arr.reduce((sum, x) => sum + x, 0);

TS 类型优势示例

constnumbers:number[]=[1,2,3,4,5];// map 返回类型自动推断为 number[]constdoubled:number[]=numbers.map(n=>n*2);// filter 返回类型仍为 number[]constevens:number[]=numbers.filter(n=>n%2===0);// reduce 可指定累加器类型constsum:number=numbers.reduce((acc:number,curr)=>acc+curr,0);
7. 循环控制语句
语句作用示例
break跳出当前循环break;
continue跳过本次循环,继续下一次continue;
label为循环命名,可跳出外层循环

带标签的 break(用于嵌套循环):

outer:for(leti=0;i<3;i++){for(letj=0;j<3;j++){if(i===1&&j===1){breakouter;// 直接跳出外层循环}console.log(i,j);}}
8. 最佳实践建议
  1. 优先使用for...of遍历数组,简洁且类型安全。
  2. 避免for...in用于数组
  3. 大规模数据处理优先使用高阶方法mapfilter等),更符合函数式编程。
  4. 避免无限循环:TS 无法完全检测,但逻辑上要确保退出条件。
  5. 结合类型守卫在循环中缩小类型
constitems:(string|number)[]=["a",1,"b",2];for(constitemofitems){if(typeofitem==="string"){// item 被缩小为 stringconsole.log(item.toUpperCase());}else{// item 被缩小为 numberconsole.log(item.toFixed());}}
小结:循环方式速查
场景推荐方式原因
遍历数组值for...offorEach/map类型安全、简洁
遍历对象属性for...inObject.keys()获取键
需要索引经典for (let i = 0; ...)可访问 i
条件不确定次数while/do...while灵活
函数式转换/过滤mapfilterreduce不可变、更易测试

如果您想看实际应用示例(如遍历 Map/Set、异步循环结合 async/await、或性能对比),请告诉我!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/23 18:50:34

Excalidraw AI生成结果准确性优化方向

Excalidraw AI生成结果准确性优化方向 在现代技术团队的日常协作中&#xff0c;一张草图往往比千言万语更有效。无论是快速勾勒系统架构、梳理业务流程&#xff0c;还是进行产品原型讨论&#xff0c;可视化表达已成为信息传递的核心手段。然而&#xff0c;传统绘图工具的学习成…

作者头像 李华
网站建设 2026/6/18 16:37:15

从零搭建AutoGLM自动化流水线,这7个必备脚本你用过几个?

第一章&#xff1a;Open-AutoGLM 常用脚本库概述 Open-AutoGLM 是一个面向自动化自然语言处理任务的开源脚本库集合&#xff0c;专为简化大模型调用、任务编排与结果后处理而设计。其核心目标是通过模块化脚本降低 GLM 系列模型在实际业务场景中的集成门槛。 核心功能模块 au…

作者头像 李华
网站建设 2026/6/21 0:25:34

【AI流程自动化新纪元】:Open-AutoGLM拖拽功能背后的黑科技解析

第一章&#xff1a;Open-AutoGLM拖拽式流程搭建 Open-AutoGLM 提供了一种直观高效的可视化开发方式&#xff0c;用户可以通过拖拽组件快速构建复杂的自然语言处理流程。该平台将模型调用、数据处理与逻辑控制抽象为可复用的节点&#xff0c;极大降低了AI应用开发的技术门槛。 …

作者头像 李华
网站建设 2026/6/23 5:03:09

Excalidraw冲突解决机制解析

Excalidraw冲突解决机制解析 在远程协作日益成为常态的今天&#xff0c;多个用户同时编辑同一份设计稿、流程图或白板笔记的场景已司空见惯。然而&#xff0c;当你拖动一个矩形的同时&#xff0c;同事也在修改它的颜色——这种“撞车”操作如何不丢数据、不卡界面、最终还能达成…

作者头像 李华
网站建设 2026/6/22 13:23:49

【无代码AI时代来临】:Open-AutoGLM让你7天掌握智能流程构建

第一章&#xff1a;无代码AI时代的到来与Open-AutoGLM的定位人工智能技术正以前所未有的速度向大众化、平民化演进。随着无代码&#xff08;No-Code&#xff09;理念在软件开发领域的成功实践&#xff0c;其与AI工程的深度融合催生了“无代码AI”这一新兴范式。该模式允许非技术…

作者头像 李华
网站建设 2026/6/22 7:21:45

【AutoGLM最佳实践指南】:从零部署到性能优化的7个关键节点

第一章&#xff1a;Open-AutoGLM 流程模板分享Open-AutoGLM 是一个面向自动化自然语言处理任务的开源流程框架&#xff0c;支持灵活的任务编排、模型调用与结果解析。该模板设计旨在提升大语言模型在结构化任务中的执行效率&#xff0c;适用于智能问答、数据提取与流程自动化等…

作者头像 李华