news 2026/4/18 1:59:54

TypeScript 核心知识点速查表

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
TypeScript 核心知识点速查表

一、基础类型(必掌握)

1. 原生基础类型

类型说明示例代码
string字符串let name: string = "张三";
number数字(整数/浮点数)let age: number = 25; const pi = 3.14;
boolean布尔值let isDone: boolean = true;
null空值let n: null = null;
undefined未定义let u: undefined = undefined;
symbol唯一值(ES6+)const id: symbol = Symbol("id");
bigint大整数(ES11+)let bigNum: bigint = 100n;

2. TS 新增基础类型

类型说明示例代码
any任意类型(关闭类型校验,少用)let val: any = 123; val = "abc";
unknown安全版 any(需类型守卫)let unk: unknown = "hi"; if (typeof unk === "string") unk.length;
void无返回值(函数用)function log(): void { console.log("日志"); }
never永无返回值(报错/无限循环)function throwErr(): never { throw new Error("错了"); }

3. 数组类型(3种写法)

// 1. 类型+[](最常用)letnumArr:number[]=[1,2,3];// 2. Array<类型>(泛型)letstrArr:Array<string>=["a","b","c"];// 3. 联合类型数组letmixArr:(number|string)[]=[1,"a"];

4. 元组类型(固定长度+类型)

// 声明:[类型1, 类型2, ...]letuser:[string,number]=["张三",25];let[userName,userAge]=user;// 解构赋值,类型自动匹配

二、进阶类型(项目核心)

1. 联合类型(|,多类型选其一)

typeStatus="success"|"error"|"loading";// 字面量联合(常用)letstatus:Status="success";// 类型守卫:避免调用方法报错functionformat(val:number|string){if(typeofval==="string")returnval.toUpperCase();returnval.toFixed(2);}

2. 交叉类型(&,合并多类型)

typePerson={name:string;age:number};typeJob={job:string;salary:number};typePersonWithJob=Person&Job;// 同时拥有两个类型的属性constuser:PersonWithJob={name:"张三",age:25,job:"前端",salary:20000};

3. 类型别名(type,复用类型)

// 基础类型复用typeStr=string;// 复杂类型复用typeUser={id:number;name:string;age?:number;// 可选属性readonlyphone:string;// 只读属性};// 函数类型复用typeFn=(a:number,b:number)=>number;constadd:Fn=(x,y)=>x+y;

4. 接口(interface,描述结构+继承)

// 基础接口interfacePerson{name:string;age?:number;// 可选属性[key:string]:any;// 任意属性}// 接口继承(核心优势)interfaceStudentextendsPerson{studentId:number;study():void;// 方法声明}conststudent:Student={name:"李四",studentId:1001,study(){}};

5.type vs interface核心区别

维度typeinterface
核心用途任意类型别名(基础/联合/交叉)对象/类结构描述,侧重继承
继承用交叉类型&支持extends继承
重复定义报错(不支持合并)自动合并属性(独有)
支持类型所有类型主要支持对象/类/函数

6. 函数类型(约束参数+返回值)

// 1. 直接声明functionadd(a:number,b:number):number{returna+b;}// 2. 可选参数(放必选后)functiongreet(name:string,age?:number){}// 3. 默认参数functionfn(a:number=10,b:number){}// 4. 剩余参数functionsum(...nums:number[]):number{returnnums.reduce((a,b)=>a+b,0);}

7. 泛型(<T>,动态类型复用)

(1)基础泛型函数
// <T> 泛型参数,动态接收类型functionidentity<T>(val:T):T{returnval;}// 调用:自动推导类型conststr=identity("abc");// string 类型constnum=identity<number>(123);// 显式指定类型
(2)泛型约束(extends限制范围)
interfaceHasLength{length:number;}// T 必须包含 length 属性functiongetLength<TextendsHasLength>(val:T):number{returnval.length;}getLength("abc");// 合法(字符串有 length)
(3)泛型接口/类型别名
// 泛型类型别名(通用对象)typeObj<T>={[key:string]:T};constnumObj:Obj<number>={a:1,b:2};// 泛型接口(通用函数)interfaceFn<T,U>{(param:T):U;}constnumToStr:Fn<number,string>=(num)=>num.toString();

三、核心工具类型(直接复用)

1. 映射类型(基于已有类型生成新类型)

工具类型作用示例(基于type User = { id: number; name: string }
Partial<T>所有属性改为可选Partial<User>→ { id?: number; name?: string }
Required<T>所有属性改为必选Required<Partial<User>>→ 还原 User 类型
Readonly<T>所有属性改为只读Readonly<User>→ { readonly id: number; … }
Pick<T, K>挑选 T 中 K 属性Pick<User, "id">→ { id: number }
Omit<T, K>排除 T 中 K 属性Omit<User, "name">→ { id: number }
Record<K, T>生成键 K、值 T 的对象类型Record<string, User>→ { [key: string]: User }

2. 泛型工具类型(类型提取/转换)

工具类型作用示例
Exclude<T, U>从 T 排除能赋值给 U 的类型`Exclude<“a”
Extract<T, U>从 T 提取能赋值给 U 的类型`Extract<“a”
ReturnType<T>提取函数返回值类型ReturnType<()=>number>→ number
ConstructorParameters<T>提取构造函数参数类型ConstructorParameters<DateConstructor>→ [number

四、类型守卫(缩小类型范围)

1. 常用类型守卫方式

方式适用场景示例代码
typeof基础类型(string/number等)if (typeof val === "string") {}
instanceof引用类型(数组/类实例)if (val instanceof Array) {}
in对象是否含某个属性if ("name" in val) {}
自定义类型守卫复杂类型判断function isUser(val: any): val is User { return "id" in val; }

2. 高级类型收窄

// 真值收窄(排除 falsy 值)functionprint(msg:string|null){if(msg)console.log(msg.length);// msg 收窄为 string}// 相等收窄(=== 判断)typeDir="up"|"down";functionmove(dir:Dir){if(dir==="up"){}// dir 收窄为 "up"}

五、枚举(enum,命名常量集合)

1. 数字枚举(支持自增+反向映射)

enumStatusCode{Success=200,// 初始值Error=400,Loading// 自增 401}console.log(StatusCode.Success);// 200console.log(StatusCode[200]);// "Success"(反向映射)

2. 字符串枚举(无自增,无反向映射)

enumUserStatus{Active="已激活",Frozen="已冻结"}constuser={status:UserStatus.Active};// 语义清晰,避免魔法值

六、类与 TS(面向对象+类型约束)

1. 类的基础类型

classPerson{// 属性类型声明name:string;readonlygender:string;// 只读属性// 构造函数constructor(name:string,gender:string){this.name=name;this.gender=gender;}// 方法类型sayHello():string{return`Hello${this.name}`;}}

2. 访问修饰符(权限控制)

修饰符访问范围(类内/子类/外部)示例
public全范围(默认)public name: string;
private仅类内private age: number;
protected类内+子类protected job: string;

3. 抽象类(abstract,不能实例化)

abstractclassAnimal{abstractmakeSound():void;// 抽象方法,子类必须实现eat(){console.log("吃东西");}// 普通方法}classDogextendsAnimal{makeSound(){console.log("汪汪叫");}// 实现抽象方法}// const animal = new Animal(); // 报错:抽象类不能实例化

七、关键配置(tsconfig.json

1. 核心必配项

{"compilerOptions":{"target":"ES2020",// 编译后 JS 版本"module":"ESNext",// 模块规范(前端)/ CommonJS(Node)"outDir":"./dist",// 输出目录"rootDir":"./src",// 源码目录"strict":true,// 开启严格模式(核心)"esModuleInterop":true,// 兼容 CommonJS/ESM"moduleResolution":"Bundler",// 模块解析(前端用 Bundler)"skipLibCheck":true,// 跳过第三方库类型检查(提效)"baseUrl":"./",// 基础路径"paths":{"@/*":["src/*"]}// 路径别名(@ 指向 src)},"include":["./src/**/*"],// 编译范围"exclude":["node_modules"]// 排除目录}

八、常见问题解决方案

1. null 不能赋值给其他类型

// 方案1:联合类型(推荐)letmsg:string|null=null;// 方案2:非空断言(确定非 null)constinput=document.getElementById("input")!;// 方案3:可选链(短路避免报错)user?.name?.length;

2. 找不到模块声明文件

// 方案1:安装社区类型(优先)npm install @types/xxx-D// 方案2:手动声明模块(src/types/index.d.ts)declaremodule"xxx"{exportfunctionfn():void;}

3. 类属性未初始化

classPerson{age:number=18;// 方案1:直接初始化name:string;constructor(name:string){this.name=name;// 方案2:构造函数赋值}}

九、最佳实践

  1. 禁用any:用unknown替代,配合类型守卫;
  2. 优先类型推导:变量赋值时让 TS 自动推导,减少冗余;
  3. 开启严格模式strict: true提前发现 bug;
  4. 类型复用:重复类型抽离为type/interface
  5. 路径别名:用@简化导入,提升代码可读性。

这份速查表覆盖了 TS 开发的核心知识点,可直接作为日常开发的参考手册,快速定位所需语法和解决方案~

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

PPO强化学习算法详解

PPO强化学习算法详解 一、什么是PPO&#xff1f; PPO是一种策略梯度方法&#xff0c;由OpenAI在2017年提出。它的核心思想是&#xff1a;在更新策略时&#xff0c;不要让新策略偏离旧策略太远&#xff0c;这样训练更稳定。 为什么需要PPO&#xff1f; 传统的策略梯度方法&a…

作者头像 李华
网站建设 2026/4/17 21:10:09

基于CARAFE上采样操作的YOLOv12性能优化实战指南

购买即可解锁300+YOLO优化文章,并且还有海量深度学习复现项目,价格仅需两杯奶茶的钱,别人有的本专栏也有! 文章目录 基于CARAFE上采样操作的YOLOv12性能优化实战指南 性能提升数据实证 CARAFE核心机制解析 完整实现代码 1. CARAFE基础模块实现 2. YOLOv12与CARAFE的集成方…

作者头像 李华
网站建设 2026/4/18 7:43:38

【Azure CLI量子作业状态查询全攻略】:掌握5种高效查询技巧与实战命令

第一章&#xff1a;Azure CLI量子作业状态查询概述Azure CLI 提供了对 Azure Quantum 服务的命令行访问能力&#xff0c;使开发者能够提交量子电路、管理作业以及查询作业执行状态。通过简洁的指令结构&#xff0c;用户可在本地或自动化脚本中高效监控量子计算任务的生命周期。…

作者头像 李华
网站建设 2026/4/18 8:55:32

云原生Agent的Docker批量部署全解析(专家20年实战经验曝光)

第一章&#xff1a;云原生Agent的Docker批量部署概述在现代云原生架构中&#xff0c;自动化部署和管理分布式Agent已成为提升运维效率的核心手段。利用Docker容器化技术&#xff0c;可实现Agent的快速构建、标准化运行环境与跨平台一致性部署。通过集中编排工具与脚本化流程&am…

作者头像 李华
网站建设 2026/4/18 8:48:55

如何让Cirq智能补全100%命中?深入解析内部语法树逻辑

第一章&#xff1a;Cirq 代码补全的语法规则Cirq 是由 Google 开发的用于编写、模拟和运行量子电路的 Python 框架。在使用 Cirq 进行开发时&#xff0c;启用代码补全功能可以显著提升编码效率。代码补全依赖于正确的语法规则和类型提示机制&#xff0c;IDE&#xff08;如 VS C…

作者头像 李华