当前位置: 首页 > 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.gsyq.cn/news/158280.html

相关文章:

  • 2025年免费软著查询渠道汇总!可以查到6项软著申请信息! - 还在做实验的师兄
  • 如何用Open-AutoGLM实现多语言动态菜单?90%人都忽略的3个细节
  • .NET中为UEditor添加图片删除功能
  • doris的导入数据库文件的的同步导入方式
  • 别再一张张画图了!这个网站让你的PPT配图效率翻十倍
  • 两周冲刺软考中级软件设计师备考笔记
  • C语言内存对齐与位域详解
  • Hepcidin-25
  • 【紧急预警】Open-AutoGLM菜单配置中的5个高危漏洞及修复方案
  • 数字化诊疗哪个医院好
  • 函数栈帧的创建与销毁过程详解
  • ECharts实现3D飞线地图的动画秘籍
  • H3C华为等网络设备Console口连接与配置指南
  • 2025年12月路灯品牌大赏,品质卓越者何方神圣?智能台灯/教室灯/课桌椅/台灯/卧室台灯,路灯工厂排行 - 品牌推荐师
  • 粉末吨袋/定量包装机厂家哪家好?2025包装机械厂家口碑榜 - 栗子测评
  • Halcon中3D平面度检测与工业应用解析
  • 查询软著信息可以查到哪些信息?可以查出源代码和说明文档吗?​​​​​​​ - 还在做实验的师兄
  • 伺服管家,Profinet转ethercat网关模块应用案例
  • 2025年青少年防沉迷工具推荐:金色花APP价格贵吗、广告多吗 - 工业推荐榜
  • Naker.Back:用3D交互背景让网站酷起来
  • 软著证书怎么查询,软件著作权查询方法有哪几种方式? - 还在做实验的师兄
  • 两步优化PyTorch DataLoader加载速度
  • PPT中3D模型功能详解与实战应用
  • ConstrainedDelaunay2D 顺逆时针限制三角剖分
  • AI 测试真正的分水岭,正在从“会不会用模型”走向“能不能跑稳系统”
  • UUD白羊座蓝牙音箱MX02拆解:音质与设计的平衡
  • Win10下安装TensorFlow 2.3.0 GPU版本完整教程
  • Docker中配置Stable Diffusion WebUI与TensorRT
  • 揭秘Open-AutoGLM本地化难题:5个关键步骤实现零延迟AI响应
  • 梯度下降法:优化算法核心解析