2026/6/1 7:20:30
网站建设
项目流程
湖南3合1网站建设公司,电子商务网站建设的必要性,百度搜索引擎地址,连云港网站建设wangTypeScript 条件语句详解
TypeScript 的条件语句语法与 JavaScript 完全相同#xff0c;包括 if、else if、else、switch 和三元运算符。TypeScript 的优势在于类型缩小#xff08;Type Narrowing#xff09;#xff1a;通过条件判断#xff0c;TS 能在编译时自动推断变量…TypeScript 条件语句详解TypeScript 的条件语句语法与 JavaScript 完全相同包括if、else if、else、switch和三元运算符。TypeScript 的优势在于类型缩小Type Narrowing通过条件判断TS 能在编译时自动推断变量的更精确类型从而提供更智能的代码补全和错误检查。1. if / else if / else基本语法if(condition1){// 执行代码}elseif(condition2){// 执行代码}else{// 执行代码}示例 类型缩小演示letvalue:string|numberHello;if(typeofvaluestring){// 这里 TS 知道 value 是 stringconsole.log(value.toUpperCase());// 安全调用字符串方法console.log(value.length);// OK}else{// 这里 TS 知道 value 是 numberconsole.log(value.toFixed(2));// 安全调用数字方法}// 另一个常见场景处理 null / undefinedfunctiongreet(name:string|null){if(namenull){console.log(Hello, Guest!);}else{// 这里 name 被缩小为 stringconsole.log(Hello,${name.toUpperCase()});}}2. 三元条件运算符Ternary Operator语法condition?exprIfTrue:exprIfFalse示例letage:number20;letstatus:stringage18?成人:未成年;console.log(status);// 成人// 嵌套三元不推荐过多嵌套可读性差letcategoryage13?儿童:age18?青少年:成人;TS 类型推断结果类型为两个表达式的联合类型。letresult:string|numberage18?成年:18;// result 类型为 string | number3. switch 语句语法switch(expression){casevalue1:// 代码break;casevalue2:// 代码break;default:// 代码}示例enumColor{RedRED,GreenGREEN,BlueBLUE}letcolor:ColorColor.Green;switch(color){caseColor.Red:console.log(红色);break;caseColor.Green:console.log(绿色);break;caseColor.Blue:console.log(蓝色);break;default:// TS 会检查是否所有情况都覆盖如果 Color 是有限联合类型console.log(未知颜色);}TS 优势当switch的表达式是字面量联合类型如字符串字面量或枚举时TS 会检查是否遗漏了某个 case开启strict模式下更严格。支持类型缩小functionhandleStatus(status:loading|success|error){switch(status){caseloading:console.log(正在加载...);break;casesuccess:console.log(成功);// status 类型被缩小为 successbreak;caseerror:console.log(出错啦);break;// 如果漏掉一个 caseTS 会报错exhaustive check}}4. 真值/假值判断Truthy / FalsyJavaScript/TS 中的假值falsyfalse、0、空字符串、null、undefined、NaN示例letusername:string|undefined;if(username){console.log(有用户名);// 不会执行因为 是 falsy}else{console.log(无用户名);// 执行}推荐更精确的检查避免意外if(username!username!undefined){...}// 或使用空值合并letdisplayNameusername??默认用户;5. 高级条件技巧结合 TS 类型系统a. 类型守卫Type GuardsfunctionisString(value:any):valueisstring{returntypeofvaluestring;}functionprocess(value:string|number){if(isString(value)){// value 被缩小为 stringvalue.toUpperCase();}else{value.toFixed();}}b. 可辨识联合类型Discriminated UnionsinterfaceCircle{kind:circle;radius:number;}interfaceSquare{kind:square;side:number;}typeShapeCircle|Square;functiongetArea(shape:Shape):number{switch(shape.kind){casecircle:returnMath.PI*shape.radius**2;casesquare:returnshape.side**2;// TS 保证所有 kind 都被覆盖}}最佳实践建议优先使用而非。开启strictNullChecks强制处理null/undefined。利用类型缩小减少类型断言as。switch 用于多分支时尤其适合联合类型和枚举。避免过深嵌套可提取函数提高可读性。使用可选链和空值合并简化条件letlengthuser?.profile?.name?.length??0;小结条件语句速查语句类型适用场景TS 优势if/else简单二分支或多条件类型缩小最强大三元运算符简单赋值或返回值简洁但不宜嵌套switch多值匹配枚举、字面量联合穷尽性检查exhaustive??/?.处理 null/undefined安全访问避免空指针如果您想看更多实际示例如异步条件处理、结合 Promise 的条件、或 React 中的条件渲染请告诉我