前端技术_TypeScript(第一章)
目录1:什么是TS2:什么是静态类型检查2.1:js无静态类型检查2.2:ts有静态类型检查2.3:什么是静态类型检查3:TS编译成js3.1:命令行编译 TSC命令3.2:自动化编译 TSC命令3.3:vue和react都不用这两种方式使用基于脚手架的webpack或者vit编译4:TS类型声明(核心语法)4.1:类型声明4.2:类型推断4.3:类型汇总4.3.1: unknown 不知道什么类型但是是安全版的any,因为需要类型断言或者类型缩小才能使用4.3.2: never 修饰方法只能抛出异常不能有返回值4.3.3: void 修饰方法没有返回值默认是undifined5:类学习6:抽象类学习7:接口1:什么是TS1:微软开发的编程语言是js的超集是基于js的扩展语言。2:ts增加了静态类型检查、接口、范型等特性适合开发大型项目ts需要编译成js交给浏览器运行。2:什么是静态类型检查2.1:js无静态类型检查2.2:ts有静态类型检查2.3:什么是静态类型检查在代码运行前发现代码的错误和不合理给出提示这样是不是就能显著的减少开发错误了。也就是在运行之前的错误前置。3:TS编译成js3.1:命令行编译 TSC命令-- 第一步安装ts编译器 sudo npm i typescript -g -- tsc 命令编译ts成js tsc ts2.ts3.2:自动化编译 TSC命令-- 生成项目的全局tsconfig配置文件 约束了项目中的ts怎么编译成js tsconfig.json tsc init -- 它会自动读取 tsconfig 里的文件、编译选项不会报警。 tsc --watch以下就是生成的tsconfig.json的配置约束了怎么编译ts成js{ // 官方tsconfig完整文档https://aka.ms/tsconfig compilerOptions: { // 文件目录配置 // rootDir: ./src, // 指定源码根目录ts仅编译该目录下文件 // outDir: ./dist, // 编译后js、d.ts等文件输出目录 // 运行环境与模块规范 // 模块解析标准nodenext 适配 Node.js ESM / CommonJS 双模式 module: nodenext, // 编译输出JS版本esnext 输出最新ES语法不降级适合现代Node环境 target: esnext, // 自动引入的类型声明包空数组代表不自动加载全局类型 types: [], // Node项目推荐开启配置 // lib: [esnext], // 内置ES标准类型库不含DOM浏览器API // types: [node], // 加载node内置类型需提前安装 npm i -D types/node // 产物输出配置 sourceMap: true, // 生成.map源码映射文件调试时可关联ts源码 declaration: true, // 编译时同步生成 .d.ts 类型声明文件 declarationMap: true, // 为类型声明文件生成d.ts.map支持跳转源码 // 严格类型校验高阶严格规则 noUncheckedIndexedAccess: true, // 对象索引取值自动判定可能为undefined杜绝空值报错 exactOptionalPropertyTypes: true,// 可选属性严格区分 T | undefined 和 直接可选?类型更精准 // 代码风格/错误拦截按需开启 // noImplicitReturns: true, // 函数所有分支必须显式return禁止隐式undefined返回 // noImplicitOverride: true, // 重写父类方法必须加override关键字 // noUnusedLocals: true, // 禁止定义未使用的局部变量 // noUnusedParameters: true, // 禁止函数定义未使用的入参 // noFallthroughCasesInSwitch: true,// switch分支禁止无break穿透 // noPropertyAccessFromIndexSignature: true, // 索引类型不能用.点访问只能[]访问 // TS官方推荐核心配置 strict: true, // 开启全套严格类型检查包含noImplicitAny、strictNullChecks等 jsx: react-jsx, // JSX编译模式react17无需手动引入React verbatimModuleSyntax: true,// 导入导出语法严格导入类型必须加type关键字 isolatedModules: true, // 单文件独立编译适配vite、esbuild等非tsc构建工具 noUncheckedSideEffectImports: true, // 拦截无导入变量的副作用导入避免tree-shake失效 moduleDetection: force, // 强制识别文件模块类型自动区分ESM/CJS skipLibCheck: true, // 跳过第三方库类型校验大幅提升编译速度 } }3.3:vue和react都不用这两种方式使用基于脚手架的webpack或者vit编译4:TS类型声明(核心语法)4.1:类型声明类型声明就是在变量直接设置类型严格校验检查let a10; // 声明一个变量 a并赋值为 10 这是js写法 let num1:number; // 声明一个变量 num1并指定类型为 number并赋值为 20 这是ts写法4.2:类型推断就是不写类型也能推断出来类型// ts的类型推断 let f10; // 声明一个变量 f并赋值为 10ts会自动推断出 f 的类型为 number fhello; // 这里会报错因为 f 的类型是 number不能赋值为 string 类型的 hello4.3:类型汇总4.3.1: unknown 不知道什么类型但是是安全版的any,因为需要类型断言或者类型缩小才能使用//unknown 不知道什么类型但是是安全版的any,因为需要类型断言或者类型缩小才能使用 console.log(); // unknown 类型的变量 a 可以赋值为任意类型的值但是在使用时需要进行类型断言或者类型缩小否则会报错 let a:unknown; a1; console.log(typeof a); // unknown 类型的变量 a 可以赋值为任意类型的值但是在使用时需要进行类型断言或者类型缩小否则会报错 ahello; atrue; a{name:张三,age:20}; a[1,2,3]; anew Date(); aaaa; let str3:string; str3a;// 这里会报错因为 a 的类型是 unknown不能赋值为 string 类型的 str3 str3a as string; // 这里是正确的因为 a 的类型是 unknown可以通过类型断言将其转换为 string 类型的 str3 //类型缩小 switch(typeof a){ case string: str3a; // 这里是正确的因为 a 的类型是 string可以赋值为 string 类型的 str3 break; case number: let num:numbera; // 这里是正确的因为 a 的类型是 number可以赋值为 number 类型的 num break; case boolean: let bool:booleana; // 这里是正确的因为 a 的类型是 boolean可以赋值为 boolean 类型的 bool break; case object: break; case function: let func:Functiona; // 这里是正确的因为 a 的类型是 function可以赋值为 function 类型的 func break; default: break; } console.log(typeof a); // unknown 类型的变量 a 可以赋值为任意类型的值但是在使用时需要进行类型断言或者类型缩小否则会报错 console.log(输出 a);4.3.2: never 修饰方法只能抛出异常不能有返回值//never 修饰方法只能抛出异常不能有返回值 function add(): never { throw new Error(Function add never returns); }4.3.3: void 修饰方法没有返回值默认是undifined//void 修饰方法表示没有返回值,默认返回undefined function add1(): void { console.log(Function add1 returns void,测试void类型); // 这里是正确的因为 add1 方法的返回类型是 void不能有返回值 } var result1 add1(); // 这里是正确的因为 add1 方法的返回类型是 void可以赋值给任何类型的变量 console.log(result1); // undefined5:类学习//类相关的知识 class Person { name: string; age: number; constructor(name: string, age: number) { this.name name; this.age age; } sayHello() { console.log(Hello, my name is ${this.name} and I am ${this.age} years old.); } } //类的简写写法 class Teacher { constructor(public name: string,public age: number, subject: string) { } } let teacher1 new Teacher(张三, 30, 数学); console.log(teacher1); // 输出: Teacher { name: 张三, age: 30 } class student extends Person { gender: string; constructor(name: string, age: number, gender: string) { super(name, age); this.gender gender; } study() { console.log(${this.name} is studying.); } sayHello() { console.log(Hello, 学生my name is ${this.name} and I am ${this.age} years old.); } } let person1 new Person(Alice, 30); console.log(person1); // 输出: Alice person1.sayHello(); // 输出: Hello, my name is Alice and I am 30 years old. let student1 new student(Bob, 20, male); console.log(student1); // 输出: Bob student1.sayHello(); // 输出: Hello, my name is Bob and I am 20 years old. student1.study(); // 输出: Bob is studying.6:抽象类学习定义通用属性和方法避免重复。/抽象类 console.log(抽象类测试); abstract class Package { weight: number; constructor(weight: number) { this.weight weight; } abstract calculatePrice(): number; // 抽象方法子类必须实现该方法 printWeight() { console.log(The weight of the package is ${this.weight} kg.运费是 ${this.calculatePrice()} 元); // 这里是正确的因为 calculatePrice 方法是抽象方法子类必须实现该方法 } } class shunfeng extends Package { price: number; constructor(weight: number,price: number) { super(weight); this.price price; } calculatePrice(): number { return this.weight * this.price; // 这里是正确的因为 calculatePrice 方法是抽象方法子类必须实现该方法 } } let package1 new shunfeng(2,15); package1.printWeight(); // 输出: The weight of the package is 2 kg.运费是 20 元 class yunda extends Package { price: number; constructor(weight: number,price: number) { super(weight); this.price price; } calculatePrice(): number { return this.weight * this.price; // 这里是正确的因为 calculatePrice 方法是抽象方法子类必须实现该方法 } } let package2 new yunda(2,10); package2.printWeight(); // 输出: The weight of the package is 2 kg.运费是 10 元7:接口/接口 console.log(接口测试); interface Shape { area(): number; // 接口方法子类必须实现该方法 } class Circle implements Shape { // 实现接口 Shape 圆形 radius: number; //半径 constructor(radius: number) { this.radius radius; } area(): number {//面积是 return Math.PI * this.radius * this.radius; // 这里是正确的因为 area 方法是接口方法子类必须实现该方法 } } let circle1 new Circle(5); console.log(The area of the circle is ${circle1.area()}.); // 输出: The area of the circle is 78.53981633974483. class Rectangle implements Shape { // 实现接口 Shape 矩形 width: number;//宽度 height: number;//高度 constructor(width: number, height: number) { this.width width; this.height height; } area(): number { return this.width * this.height; // 这里是正确的因为 area 方法是接口方法子类必须实现该方法 } } let rectangle1 new Rectangle(5, 10); console.log(The area of the rectangle is ${rectangle1.area()}.); // 输出: The area of the rectangle is 50.

相关新闻

Expression库Result类型实战:优雅的错误处理与铁路编程

Expression库Result类型实战:优雅的错误处理与铁路编程

Expression库Result类型实战:优雅的错误处理与铁路编程 【免费下载链接】Expression Functional programming for Python 项目地址: https://gitcode.com/gh_mirrors/exp/Expression Expression库为Python开发者带来了函数式编程的强大工具,其中R…

2026/10/2 11:12:04 阅读更多 →
如何快速搭建ECS-Network-Racing-Sample:10分钟上手Unity DOTS多人游戏开发

如何快速搭建ECS-Network-Racing-Sample:10分钟上手Unity DOTS多人游戏开发

如何快速搭建ECS-Network-Racing-Sample:10分钟上手Unity DOTS多人游戏开发 【免费下载链接】ECS-Network-Racing-Sample ECS multiplayer racing sample to showcase using Unity Entities and netcode with best practices 项目地址: https://gitcode.com/gh_mi…

2026/10/14 4:50:16 阅读更多 →
Ansible for Kubernetes故障排除手册:常见问题诊断和解决方案大全

Ansible for Kubernetes故障排除手册:常见问题诊断和解决方案大全

Ansible for Kubernetes故障排除手册:常见问题诊断和解决方案大全 【免费下载链接】ansible-for-kubernetes Ansible and Kubernetes examples from Ansible for Kubernetes Book 项目地址: https://gitcode.com/gh_mirrors/an/ansible-for-kubernetes &…

2026/9/29 14:29:50 阅读更多 →

最新新闻

蓝牙模块选型实战指南:从需求到定型的完整流程

蓝牙模块选型实战指南:从需求到定型的完整流程

1. 蓝牙模块选型这件事,远比参数表复杂做硬件项目的人都有一个共识:选型定生死。尤其是蓝牙模块这种看起来简单、实际上坑多到让人怀疑人生的东西。我见过太多项目在打样阶段一切正常,量产之后开始批量出问题,最后追根溯源&#x…

2026/10/14 15:48:53 阅读更多 →
高通Camera底层openCamera流程详解:从HAL3到CamX架构

高通Camera底层openCamera流程详解:从HAL3到CamX架构

1. 从零搞懂高通Camera底层:openCamera流程到底在干什么如果你正在做Android Camera相关的开发,尤其是涉及到底层HAL层、驱动适配或者性能优化,那你一定绕不开高通平台上的Camera2 HAL3架构。很多人第一次接触这套东西的时候,看到…

2026/10/14 15:48:53 阅读更多 →
STM32驱动MLX90614与OLED:I2C通信与显示实战

STM32驱动MLX90614与OLED:I2C通信与显示实战

简介:这份资源面向正在学习STM32嵌入式开发的初学者与进阶者,围绕MLX90614红外测温传感器与OLED显示屏的联动应用展开,帮助读者打通从传感器通信到数据显示的完整链路。压缩包共191个文件,约6.36MB,以C源码与头文件为核…

2026/10/14 15:48:53 阅读更多 →
Geek Uninstaller 使用指南:彻底卸载 Windows 软件并清除残留

Geek Uninstaller 使用指南:彻底卸载 Windows 软件并清除残留

做系统维护这行久了,会发现一个规律:大部分人电脑变卡的起点,不是硬件不行,而是卸载软件的方式不对。在 Windows 上,很多人对“卸载”的理解还停留在设置里点一下删除,然后呢?文件夹里有残留、启…

2026/10/14 15:48:53 阅读更多 →
Android开机自启实现:静态注册BOOT_COMPLETED广播接收器

Android开机自启实现:静态注册BOOT_COMPLETED广播接收器

简介:本资源是一个面向Android开发初学者与进阶者的开机自启功能教学Demo,聚焦静态注册广播接收器在系统级事件响应中的典型应用,解决应用需在设备启动完成后自动执行任务(如拉起服务、恢复状态)的实战需求。压缩包共1…

2026/10/14 15:48:53 阅读更多 →
ok-nte Combat Planner 详解:为《异环》角色编写协作战斗策略

ok-nte Combat Planner 详解:为《异环》角色编写协作战斗策略

【免费下载链接】ok-nte 异环 后台副本挂机 Automation for Neverness to Everness 项目地址: https://gitcode.com/gh_mirrors/ok/ok-nte 点击查看 免费下载 如果你在用 ok-nte 这款《异环》(Neverness to Everness)后台副本挂机工具&#…

2026/10/14 15:47:52 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →