TS梳理

news/2025/3/19 2:14:40/文章来源:https://www.cnblogs.com/zzholiday/p/18780183

强类型语言,需要做数据类型的校验(JavaScript不做数据类型的校验,执行不下去会报错)

  1. 静态类型(本质是主动声明变量的数据类型)
let age: number = 30;
let name: string = "Alice";
  1. 类型推断(不显示声明变量数据类型,也会进行推断,过于智能补充一下案例)
    2.1 根据值推断没有声明的数据类型
let age = 30; // TypeScript 推断 age 为 number 类型
let name = "Alice"; // TypeScript 推断 name 为 string 类型

2.2 函数返回值推断

function add(x: number, y: number) {return x + y; // 返回值被推断为 number 类型
}let result = add(5, 10); // result 被推断为 number

2.3 复杂类型推断

let numbers = [1, 2, 3]; // numbers 被推断为 number[] 类型
let user = { id: 1, name: "Alice" }; // user 被推断为 { id: number; name: string; } 类型
  1. 接口(可以理解为用户可以自行定义数据类型,可选属性用?标识,只读属性readonly,方法可以重载即实现的方法优先级高)
    3.1基础介绍
interface Person {name: string;age: number;greet(): void; // 方法
}
const user: Person = {name: "Alice",age: 30,greet() {console.log(`Hello, my name is ${this.name}.`);},
};user.greet(); // 输出: Hello, my name is Alice.

3.2 扩展接口(接口可以通过继承来扩展其他接口,从而组合多个接口的属性。)

interface Animal {name: string;
}interface Dog extends Animal {bark(): void;
}const dog: Dog = {name: "Rex",bark() {console.log("Woof!");},
};dog.bark(); // 输出: Woof!

3.3接口与类(类可以实现接口,确保类的结构符合接口的定义)
interface User {
id: number;
name: string;
email?: string; // 可选属性
}

class UserAccount implements User {
id: number;
name: string;
email?: string;

constructor(id: number, name: string, email?: string) {this.id = id;this.name = name;if (email) this.email = email;
}

}

const account = new UserAccount(1, "Alice", "alice@example.com");
3.4索引签名

interface StringArray {[index: number]: string; // 数字索引返回字符串
}const strings: StringArray = ["hello", "world"];
console.log(strings[0]); // 输出: hello
  1. 类和继承

  2. 泛型

  3. 枚举(定义一组相关的常量,枚举值默认数字0并递增,支持字符串,支持字符串数字混用)
    第一个枚举值为数字会自动递增,
    第一个枚举值为字符串则必须生命

enum Direction {Up,Down,Left,Right,
}console.log(Direction.Up);    // 输出: 0
console.log(Direction.Down);  // 输出: 1// 支持反向映射  你也可以根据值访问名称
  1. 联合类型和交叉类型(联合类型即多类型中的一种使用竖线 | 来定义,交叉类型同时使用多类型特性使用 & 来定义)
    type 声明数据类型 并相关类型对属性进行 运算
    联合类型 即为仅为多种类型中的一种
    交叉类型 即为同时存在
  2. 可选属性和只读属性(可选属性用?标识,只读属性readonly)
interface Product {readonly id: number;    // 只读属性name: string;description?: string;   // 可选属性
}const product: Product = {id: 1,name: "Laptop",// description 属性可以省略
};// product.id = 2; // 错误: 不能修改只读属性
  1. 模块和命名空间
    模块机制 组织代码(导出,导入,默认导出) 基于文件去管理
    命名空间 管理作用域 从全局视角去管理

模块化是es6标准,命名空间主要用于组织代码,避免命名冲突,适用于较大的项目。命名空间的成员可以在全局范围内访问,尤其是在 TypeScript 早期版本中广泛使用。

  1. 装饰器
    在 tsconfig.json 文件中,启用装饰器支持:
    {
    "compilerOptions": {
    "experimentalDecorators": true
    }
    }
    类装饰器
    类装饰器的执行顺序是在类定义时,所有的类装饰器会在构造函数被创建之前执行。

方法装饰器
方法装饰器在类的构造函数被创建时执行,且在实例方法被调用之前。

属性装饰器
属性装饰器在类的构造函数被创建时执行,且在类的实例化之前。

参数装饰器
参数装饰器在方法装饰器执行之前执行,用于记录参数的元数据。

执行顺序总结
类装饰器:首先执行,负责类的构造函数。
属性装饰器:其次执行,针对类的属性。
方法装饰器:接着执行,针对类的方法。
参数装饰器:最后执行,针对方法的参数。
主要用途
日志记录:可以在方法调用前后记录日志。
权限管理:可以检查用户权限。
验证:可以在方法执行前验证参数。
元数据:可以为类和方法添加元数据,方便后续处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/901196.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ragflow-naive模式pdf解析 调试日志

测试用例1:test_emf 无图映射解析结果 boxes1: {x0: 70.0, x1: 308.6666666666667, top: 76.0, text: Test with three images in unusual formats, bottom: 90.0, page_number: 1, layout_type: } {x0: 70.66666666666667, x1: 152.33333333333334, top: 109.66666666666667, …

树形DP 树的重心

树形DP 树的重心 给定一颗树,树中包含 \(n\) 个结点(编号 \(1 \sim n\))和 \(n-1\) 条无向边。 请你找到树的重心,并输出将重心删除后,剩余各个连通块中点数的最大值。 重心定义:重心是指树中的一个结点,如果将这个点删除后,剩余各个连通块中点数的最大值最小,那么这个…

Bootstrap5入门

Bootstrap 5 入门教程 目录Bootstrap 简介 环境配置 布局与网格系统 常用组件 工具类与工具函数 定制化与主题 项目实战示例1. Bootstrap 简介什么是 Bootstrap?开源前端框架,用于快速构建响应式网页。 基于 HTML、CSS、JavaScript。Bootstrap 5 新特性移除 jQuery,依赖原生…

如何写自己的springboot starter?自动装配原理是什么?

如何写自己的springboot starter?自动装配原理是什么? 官方文档地址:https://docs.spring.io/spring-boot/docs/2.6.13/reference/html/features.html#features.developing-auto-configuration 1. 不用starter有什么弊端?我们开发需要引入maven依赖,如果我们需要的依赖又有…

清理 node.js 包管理工具 npm 的缓存

清理 node.js 包管理工具 npm 的缓存清理 node.js 包管理工具 npm 的缓存 要清理 Node.js 包管理工具 npm 的缓存,可以按照以下步骤操作。npm 的缓存主要用于存储下载的包,通常位于用户主目录下的 .npm 文件夹中。以下是清理方法: 1. 检查 npm 缓存位置 npm 默认将缓存存储在…

清理 Python 包管理工具 pip 的缓存

清理 Python 包管理工具 pip 的缓存清理 Python 包管理工具 pip 的缓存 要清理 pip 的缓存,可以按照以下步骤操作(适用于 Python 的包管理工具 pip):检查 pip 缓存位置 pip 默认会将下载的包缓存在本地。你可以通过以下命令查看缓存目录: pip cache dir常见的缓存路径:Wi…

清理 Python 的包管理工具 pip 的缓存

清理 Python 的包管理工具 pip 的缓存清理 Python 的包管理工具 pip 的缓存 要清理 pip 的缓存,可以按照以下步骤操作(适用于 Python 的包管理工具 pip):检查 pip 缓存位置 pip 默认会将下载的包缓存在本地。你可以通过以下命令查看缓存目录: pip cache dir常见的缓存路径…

微服务的网关配置

微服务的网关配置 1. 网关路由 1.1 网关 1.1.1 存在问题 单体架构时我们只需要完成一次用户登录、身份校验,就可以在所有业务中获取到用户信息。而微服务拆分后,每个微服务都独立部署,这就存在一些问题:每个微服务都需要编写身份校验、用户信息获取的接口,非常麻烦。 用户…

博客图床 VsCode + PigGo + 阿里云OSS方案

关键字 写博客,图床,VsCode,PigGo,阿里云OSS 背景环境 我想把我在本地写的markdown文档直接搬到CSDN上和博客园上,但是图片上传遇到了问题。我需要手动到不同平台上传文件,非常耗费时间和经历。 为了解决这个问题,我想到了图床方案,我只需要把图片链接放到我本地写好的…

20244203张晨曦 实验一《Python程序设计》实验报告

20244203张晨曦《Python程序设计》实验一报告 课程:《Python程序设计》 班级: 2442 姓名: 张晨曦 学号:20244203 实验教师:王志强 实验日期:2025年3月18日 必修/选修: 专选课 1.实验内容 1.熟悉Python开发环境; 2.练习Python运行、调试技能; 3.编写程序,练习变量和…

Cobalt Strike基础

Cobalt Strike基础 Staged(有阶段) 在有阶段的执行方式中,分为Stager和Stage两个阶段Stager(初始执行载荷):​ 定义:Stager是Stage 1,是一个较小的、轻量级的初始执行载荷 ​ 作用:与服务端建立初始连接,并从服务器下载更大的Payload,也就是Stage2Stage(更大、…

OP222柔性振动白色料盘污染会引发的问题

下图为污损的料盘料盘污损会导致以下问题: 1.料盘里面缺料但是后面料仓就是不送料 柔性振动系统里面设置了加料个数,下图里面设置为15,表示如果相机识别区域里面的总阴影面积<15个零件面积,料仓加一次料。下图红框是识别区域,里面一道道横杠就是污损导致的阴影,这些阴…