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

TypeScript类型系统:从原始到对象的实战精要

1.原始类型与对象类型

原始类型

关键内容点
  • JavaScript 原始类型映射numberstringbooleannullundefinedsymbolbigint 在 TypeScript 中对应同名类型注解,null/undefinedstrictNullChecks 开启时非其他类型子类型。
  • void 类型:标记无有效返回值的函数,实际返回 undefined,与 JS 的 void 操作符语义不同。
// null/undefined 类型标注(strictNullChecks 开启时)  
const nul: null = null;  
const undef: undefined = undefined;  
const str: string = null; // 报错:类型“null”不能分配给类型“string”  // void 函数返回值  
function logName(name: string): void {  console.log(name); // 无显式返回值,类型为 void  
}  

数组与元组

关键内容点
  • 数组类型T[]Array<T>,支持泛型,如 string[] 表示字符串数组。
  • 元组(Tuple)
    • 固定长度、位置类型严格绑定,如 [string, number]
    • 可选元素(?)和具名元组(TypeScript 4.0+,为元素添加标签)。
    • 越界访问时触发类型错误,解构赋值时校验元素数量。
// 普通数组 vs 元组  
const arr: string[] = ['a', 'b']; // 可动态扩展  
const tuple: [string, number] = ['lin', 24]; // 固定长度 2,类型严格绑定  // 具名元组(提升可读性)  
const userTuple: [name: string, age: number] = ['linbudu', 28];  
console.log(userTuple.name); // 合法,类型为 string  // 可选元素与越界报错  
const optionalTuple: [string, number?, boolean?] = ['hello'];  
optionalTuple[1] = 10; // 合法  
console.log(optionalTuple[3]); // 报错:索引 3 超出元组长度  

对象类型

关键内容点
  • interface 接口定义
    • 规范对象属性类型,支持可选属性(?)和只读属性(readonly)。
    • 类型检查严格:属性不能多/少,赋值需匹配类型。
  • type 与 interface 区别
    • interface 用于定义对象/类结构,type 用于创建类型别名(如联合类型、函数类型)。
  • 特殊对象类型
    • object:非原始类型(数组、对象、函数),避免使用 Object(装箱类型)和 {}(空对象)。
// interface 定义对象结构(可选/只读属性)  
interface IUser {  readonly name: string; // 只读属性,不可重新赋值  age: number;  email?: string; // 可选属性  
}  
const user: IUser = { name: 'lin', age: 24 };  
user.name = 'newName'; // 报错:只读属性不能修改  
user.email = 'test@example.com'; // 合法  // type 定义函数类型与联合类型  
type Func = (x: number) => string;  
type ID = string | number;  // object 与 Object 的区别  
const obj: object = { key: 'value' }; // 合法,非原始类型  
const badObj: Object = 123; // 不推荐,装箱类型包含所有原始类型  

类型系统核心概念与最佳实践

关键内容点
  • 严谨性优势
    • 元组防止越界访问,readonly 修饰符编译时校验不可变属性。
    • strictNullChecks 避免 null/undefined 隐式赋值风险。
  • 与 JavaScript 的差异
    • TypeScript 的 void 是类型层面的“无返回值”,JS 的 void 是操作符(返回 undefined)。
    • 元组是 TS 特有的强类型定长数组,JS 无此概念。
// 元组用于固定结构数据(如坐标)  
const point: [number, number] = [10, 20]; // 明确 x/y 坐标类型,避免越界  // readonly 修饰数组(禁止修改原数组)  
const readonlyArr: readonly string[] = ['a', 'b'];  
readonlyArr.push('c'); // 报错:类型“readonly string[]”上不存在属性“push”  // 避免使用 {},推荐 Record<string, unknown>  
const safeObj: Record<string, unknown> = { key: 'value' };  
safeObj.unknownProp = 123; // 合法,但类型安全(值为 unknown)  

总结

通过 原始类型标注元组的定长类型约束对象接口的属性修饰 等特性,TypeScript 实现了比 JavaScript 更严格的类型检查,提升代码可靠性。案例演示了如何利用这些特性解决实际开发中的类型安全问题,如数据结构约束、属性不可变性、跨类型赋值校验等。后续可进一步学习字面量类型、枚举、泛型等进阶内容,深化类型系统应用。

http://www.dtcms.com/a/494552.html

相关文章:

  • Git 提交消息规范:理解 fix、feature 等关键词的含义
  • PostgreSQL 表达式
  • 库早报|新华社:增材制造作为新质生产力持续突围;刘宇宁自曝是3D打印玩家;易加三维中标1166.8万元项目
  • 建设模板类网站北京时间网站建设
  • 如何使用现有工具进行 .NET 8 迁移 Wpf
  • 云计算生态及学习方向和就业领域方向
  • 探域科技在AI电商应用调研报告
  • 做淘宝客网站需要什么五种网站类型
  • 期中考试几何命题难?大角几何让出卷效率翻倍,支持导出黑白试题风!
  • 前后端学习的交界
  • 爱站网影院阿里巴巴新网站怎么做运营
  • 且未县建设局网站海口正规官网设计公司
  • Redhat 8,9(及复刻系列) 一键部署Oracle26ai rpm
  • iOS移动端H5键盘弹出时页面布局异常和滚动解决方案
  • 能耗在线监测系统:革新能源管理模式,助推企业节能减排
  • Redis(66)Redis如何实现分布式锁?
  • 机器学习特征筛选中的IV值详解:原理、应用与实现
  • 海淀区企业网站建设网页升级紧急通知拿笔记好
  • Android 网络层最佳实践:Retrofit + OkHttp 封装与实战
  • vue3:el-progress
  • 大模型-高效优化技术全景解析:微调 量化 剪枝 梯度裁剪与蒸馏 上
  • Go的http响应数据写入顺序错误,造成实际响应头与预期不一致问题
  • 小型企业网站建设模板找人做jsp网站
  • 【DevOps】基于Nexus3部署Docker内网私有代理仓库docker proxy
  • [嵌入式系统-134]:智能体以及其嵌入式硬件架构
  • 不止于“看”:视频汇聚平台EasyCVR视频监控系统功能特点详解
  • R-切割数据
  • 探秘蚂蚁 S21 XP Immersion 300T:液冷技术如何提升挖矿效能
  • Steps + Input.TextArea 实现弹窗内容
  • 重庆装修公司排名表杭州网站建设优化