前端技术_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/7/19 14:56:01 阅读更多 →
如何快速搭建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/7/19 14:56:01 阅读更多 →
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/7/19 14:55:00 阅读更多 →

最新新闻

基于YOLOv8的PCB智能质检系统开发与部署

基于YOLOv8的PCB智能质检系统开发与部署

1. 项目概述:工业质检的智能化革命在电子制造业中,PCB板的质量检测一直是生产线上最关键的环节之一。传统的人工目检方式不仅效率低下(每小时仅能检测20-30块板),且漏检率高达15%-20%。我们开发的这套基于YOLOv8的智能…

2026/7/19 22:06:46 阅读更多 →
文心一言AI绘图实战手册(从模糊草图到商业级海报的12步工作流)

文心一言AI绘图实战手册(从模糊草图到商业级海报的12步工作流)

更多请点击: https://kaifayun.com 第一章:文心一言AI绘图的核心能力与适用边界 文心一言AI绘图(ERNIE-ViLG系列)依托百度自研的多模态大模型架构,实现了文本到图像的高质量生成,在中文语义理解、文化元素…

2026/7/19 22:06:46 阅读更多 →
嵌入式系统性能优化:DMA与多媒体加速器架构解析

嵌入式系统性能优化:DMA与多媒体加速器架构解析

1. 项目概述 在嵌入式系统,尤其是移动多媒体设备的设计中,如何高效地处理海量的图形、视频和音频数据,同时保持低功耗和实时响应,是工程师们面临的核心挑战。CPU固然强大,但如果让它事无巨细地处理每一字节的数据搬运&…

2026/7/19 22:06:46 阅读更多 →
真实世界机器学习:数据带伤、标注有伦理、部署看后果

真实世界机器学习:数据带伤、标注有伦理、部署看后果

1. 这些机器学习案例,真不是Kaggle上抄来的练习题 你刷过多少次“房价预测”“泰坦尼克生存率”“手写数字识别”的教程?我带过十几期数据科学训练营,八成学员的简历项目栏里,都整齐排列着这三件套。它们像教科书里的标准答案——…

2026/7/19 22:06:46 阅读更多 →
Copilot数据模型演进全图谱:从CodeGeeX到GitHub Copilot X的7次关键范式跃迁

Copilot数据模型演进全图谱:从CodeGeeX到GitHub Copilot X的7次关键范式跃迁

更多请点击: https://codechina.net 第一章:Copilot数据模型演进的底层逻辑与历史坐标 Copilot 的数据模型并非一蹴而就,而是随开发者工作流理解深度、编程语言生态演进及大模型能力边界拓展而持续重构的技术产物。其底层逻辑始终围绕“代码…

2026/7/19 22:06:46 阅读更多 →
Spring框架中ResponseEntity的全面解析与应用实践

Spring框架中ResponseEntity的全面解析与应用实践

1. ResponseEntity在Spring框架中的定位与核心价值 ResponseEntity作为Spring框架中处理HTTP响应的核心组件,本质上是对HttpEntity的扩展,增加了对HTTP状态码的封装能力。在RestTemplate和Controller方法中,它承担着统一响应模型的重要角色。…

2026/7/19 22:05:46 阅读更多 →

日新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/19 0:00:40 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/19 0:00:40 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/19 0:00:40 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/19 0:00:40 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/19 0:00:40 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/19 0:00:40 阅读更多 →

月新闻