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

TypeScript的个人理解

TypeScript 深入解析

一、实现原理

TypeScript 的核心是编译时类型检查,并支持增量编译以提高大型项目的编译效率。

  1. 解析 (Parsing)

    • 将 TypeScript 源代码解析为 Token 标记流
    • 基于 Token 构建抽象语法树 (AST)
  2. 绑定与类型检查 (核心)

    • 基于 AST,识别所有声明(变量、函数、类等),创建 Symbol 表,建立声明与符号之间的关联。
    • 进行全面的类型检查,包括:
      • 类型推断:自动推断变量或表达式的类型。
      • 类型兼容性检查:验证赋值、函数调用等操作中的类型是否兼容。
      • 类型分析:检查类型的使用是否正确。
  3. 发射 (Emit)

    • 通过类型检查后,将 AST 编译(转换)为 JavaScript 代码。
    • 此过程会进行类型擦除,移除所有 TypeScript 特有的类型语法,仅保留纯 JavaScript 代码。

二、核心概念

1. 基础类型

  • 原始类型string, number, boolean, null, undefined, symbol
  • 数组number[]Array<number>
  • 元组[number, string](固定长度和类型),可选元素:[number, string, boolean?]
  • 枚举enum Color { Red, Blue, Green }
  • 特殊类型any, void, never

2. 核心概念

  • 类型注解let userCode: number
  • 类型别名与联合类型
    type ID = number | string
    
  • 交叉类型
    type Combined = Foo & Bar
    
  • 泛型
    function getName<T>(name: T): T { return name; }
    

3. 面向对象与模块特性

  • 接口interface User { name: string; age: number; }
  • 类与修饰符class 支持 private, public, protected 等访问修饰符。
  • 类型断言
    <Type>value 或 value as Type
    
  • 模块:使用 import / export 导入导出,支持类型导出:export type Name = number | string
  • 命名空间namespace App {}(现代代码中较少使用,模块是首选)

4. 进阶类型操作

  • 装饰器 (Decorator)@decorator(实验性特性,需在配置中启用)
  • keyof 操作符type Keys = keyof MyObj,获取对象所有键的联合类型。
  • in 操作符:在类型上下文中用于遍历联合类型,生成映射类型。
  • 索引访问类型type Age = Person["age"],通过索引获取特定属性的类型。
  • 条件类型T extends U ? X : Y,根据类型条件返回不同类型。
  • 模板字符串类型
    type T = "A" | "B";
    type U = `${T}_id`; // 结果为 "A_id" | "B_id"
    

5. 实用工具类型

TypeScript 内置了一系列常用的工具类型,用于常见的类型转换操作:

  • Partial<T>:将类型 T 的所有属性变为可选
  • Required<T>:将类型 T 的所有属性变为必选
  • Readonly<T>:将类型 T 的所有属性变为只读
  • Pick<T, K>:从类型 T选取一组属性键 K 来构造新类型。
  • Omit<T, K>:从类型 T排除一组属性键 K 来构造新类型。
  • ReturnType<typeof func>:获取函数 func返回值类型
  • typeof(类型操作符):在类型上下文中使用,获取变量或属性的类型。
  • instanceof(运行时操作符):用于检查一个对象是否是某个类的实例。

6. Vue 相关:Props 默认值

在 Vue 3 的 <script setup> 语法中,可以使用 withDefaults 为基于类型的 defineProps 提供默认值:

const props = withDefaults(defineProps<{title?: string,count?: number
}>(), {title: 'Default Title',count: 0
})
http://www.jsqmd.com/news/144023/

相关文章:

  • Open-AutoGLM能在家用电脑部署吗:5步完成本地化部署实测指南
  • .NET中为UEditor添加图片删除功能
  • Excel实用技巧大全:从入门到精通
  • Revit模型导入3ds Max的完整操作指南
  • 2025年免费软著查询渠道汇总!可以查到6项软著申请信息! - 还在做实验的师兄
  • Excel随机数生成与分布应用详解
  • 如何用Open-AutoGLM实现多语言动态菜单?90%人都忽略的3个细节
  • 拆解UUD白羊座蓝牙音箱MX02:音质与设计的平衡
  • 国标GB28181算法算力平台EasyGBS如何运用流媒体技术提升安防监控效率?
  • OpenCV4.2使用viz模块显示3D图像
  • NMN抗衰产品究竟怎么选?十大NMN品牌最新榜单带你揭晓,奥本元成“产品之王” - 速递信息
  • 折叠屏手机形态多样化,轻薄耐用成市场竞争新焦点
  • 100例优秀产品按钮设计灵感分享
  • C4D新手必知的5个实用技巧
  • 两周冲刺软考中级软件设计师备考笔记
  • H5实现3D旋转照片墙:CSS与JS实战
  • 2025新乡郑州网站制作公司TOP5权威推荐:专业服务指南 - 工业品牌热点
  • 别再一张张画图了!这个网站让你的PPT配图效率翻十倍
  • doris的导入数据库文件的的同步导入方式
  • 为UEditor增加图片删除功能
  • C语言内存对齐与位域详解
  • Hepcidin-25
  • python笔记-文件
  • 如何查询自己是否拥有软件著作权证书呢? - 还在做实验的师兄
  • 函数栈帧的创建与销毁过程详解
  • 这10个PPT配图网站,公司里的PPT大神从不外传
  • 数字化诊疗哪个医院好
  • 从零开始学LlamaIndex Agent:收藏这份指南,轻松掌握大模型智能体开发
  • 2025年CR系列纽扣/一次锂锰电池生产商TOP10:揭秘CR2016/CR2025/CR2032/CR2450厂商领先的5大核心技术 - 速递信息
  • 矩阵论的奠基与现代科技应用