学习Typescript(第一弹)

news2024/11/24 4:03:28

Typescript的基础类型

Boolean类型

let bool: boolean = true;

Number类型

let num: number = 222;

String类型

let str: string = '码上coding';

数组Array类型

  • 对数组类型的定义有两种方式:
let arr1: number[] = [1,2,3];
let arr2: Array<number | string> = [1,2,'码上coding']; // Array是ts预定义的泛型接口

元组tuple类型

  • 表示一个已知数量和类型的数组,可以理解为他是一种特殊的数组
// 限制了数组元素的个数和类型,
let tuple: [number, string] = [0, '1'];
// tuple.push(2) 元组可以使用push方法插入新元素,是元组越界bug,
// tuple[2] 会报错,不允许访问

函数

let add = (a: number,b: number): number => a + b
let plus: (a: number,b: number) => number // 函数类型
plus = (a,b) => a + b

object对象

  • object 类型用于表示所有的非原始类型,即我们不能把 number、string、boolean、symbol等 原始类型赋值给 object。在严格模式下,null 和 undefined 类型也不能赋给 object。
  • 大 Object 代表所有拥有 toString、hasOwnProperty 方法的类型 所以所有原始类型、非原始类型都可以赋给 Object(严格模式下 null 和 undefined 不可以)
  • {} 空对象类型和大 Object 一样 也是表示原始类型和非原始类型的集合

let obj: object = { x:1, y:2 }
obj = 1; // 报错
obj = "a"; // 报错
obj = true; // 报错
obj = null; // 报错
obj = undefined; // 报错
obj = {}; // 正确

let obj2: { x:number, y:number } = { x:1, y:2 }
obj2.x = 3;

let obj3: Object = { x:1, y:2 }
obj3 = 1; // 正确
obj3 = "a"; // 正确
obj3 = true; // 正确
obj3 = null; // 报错
obj3 = undefined; // 报错
obj3 = {}; // 正确

let obj4: {}
obj4 = 1; // 编译正确
obj4 = "a"; // 编译正确
obj4 = true; // 编译正确
obj4 = null; // 报错
obj4 = undefined; // 报错
obj4 = {}; // 正确

Class类

class Car {
  name: string;
  color: number;
  constructor(name: string, color: number) {
    this.name = name;
    this.color = color;
  }
  likeColor(): void {
    console.log(`I like ${this.color}`);
  }
}

Symbol

let s1: symbol = Symbol();
let s2 = Symbol();

undefined, null

// undefined, null  不能赋值为其他类型
let unde: undefined = undefined;
let nu: null = null;
// 关闭tsconfig.json里的strictNullChecks:false,其他类型的值可以赋值为undefined和 null 
// num = undefined
// num = null

void类型

  • void是一个操作符,可以让任何表达式返回undefined
/** 
eg:void 0 
因为undefined可以赋值所以 void 可以确保返回的一定是undefined
*/
let noReturn = ():void => {}

any类型

  • 会跳过类型检查器对值的检查,任何值都可以赋值给any类型
let x:any = 2
x = [];
x = () => {};

Unknown 类型

  • unknown与any一样,所有类型都可以分配给unknown
  let value: unknown = 1;
  value = "qqq";
  value = false;
  • unknown与any的区别
    • 任何类型的值可以赋值给any,同时any类型的值也可以赋值给任何类型
    • unknown 任何类型的值都可以赋值给它,但它只能赋值给unknown和any

never类型

  • 永远不会有返回值的类型
// never,永远不会有返回值的类型
let error = ():never => { // 抛出异常
    throw new Error('error')
}

let endless = ():never => { // 死循环
    while(true){}
}

Enum枚举类型

  • 一组具有名字的常量集合,定义后不能修改

数字枚举

enum Role {
    Alice = 1, // 可以指定为1,不写默认是0开始递增
    Jack,
    Apple
}
console.log(Role) // 打印出来类似对象
  • 打印出来类似对象,数字和字符串都作为key,说明有反向映射

字符串枚举

enum Test {
    First='Hello',
    Second='World'
}
  • 打印出来,赋值的字符串作为了value,没有作为key,说明没有反向映射!!!

异构枚举

  • 数字枚举和字符串枚举混用,容易混淆,不建议使用
enum Answer {
    First,
    Second='ok'
}
  • 只有数字枚举有反向映射

枚举成员

  • const 常量成员
    • 没有初始值
    • 对已有成员的引用
    • 常量的表达式,在编译的时候计算出结果,以常量的形式出现在运行时环境
  • computed 需要被计算的成员
    • 一定要赋值,不然会报错
    • 不会在编译阶段计算,在运行时才会被计算
enum Char {
    // const 常量成员
    a, // 没有初始值
    b = Char.a, // 对已有成员的引用
    c = 1 + 3, // 常量的表达式,在编译的时候计算出结果,以常量的形式出现在运行时环境
    // computed 需要被计算的成员, 一定要赋值,不会在编译阶段计算,在运行时才会被计算
    d = Math.random(), 
    e = 'abc'.length,
}
console.log(Char)
  • 编译后
    const成员的值已经计算出结果了,computed成员的值被保留了,要运行时才会被计算

常量枚举

  • 用const定义的枚举就是常量枚举,会在编译阶段被移除
  • 当我们不需要对象,只需要对象的值的时候就可以使用常量枚举,可以减少编译环境的代码
const enum Month {
    Jan,
    Feb,
    Mar
}
let month = [Month.Jan, Month.Feb, Month.Mar]
  • 编译后,只是把枚举的值编译出来了

枚举类型

  • 不同类型是不可以比较的

enum E { a,b } // 都没有初始值
enum F { a = 1,b = 2 } // 初始值都为数字
enum G { a = '1',b = '2' } // 初始值都为字符串

// 不同类型是不可以比较的
let e:E = 3
let f:F = 3
// e === f  会报错

let e1:E.a = 1
let e2:E.b = 2
let e3:E.a = 1
// e1 === e2 也会报错
// e1 === e3 可以

let g1:G = G.b
let g2:G.a = G.a

学习Typescript(第二弹)

学习Typescript(第三弹)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android APK 反编译后重新打包并签名

APKTool&#xff1a; Apktool 是一个逆向android非常有用的工具&#xff0c;可以用来反编译apk文件&#xff0c;并且能在修改部分资源文件后&#xff0c;重新打包成一个新的apk。 下载连接&#xff1a;http://ibotpeaches.github.io/Apktool/install/ 下载之后文件夹非常清爽&…

电力节能设备远程监控系统解决方案

电力节能设备远程监控系统解决方案 一、项目背景 随着城市化进程的发展&#xff0c;对电力设备安全、可靠、经济运行的要求越来越高&#xff0c;由于没有统一专业的用电现代化管理规划&#xff0c;电力设备管理混乱、数据采集不方便、运行智能化程度低&#xff0c;需要实时掌…

复合查询--- MySQL总结(三)

复合查询 文章目录 复合查询多表查询自连接子查询单行查询多行查询多列子查询合并查询 多表查询 前面讲述的关于进行一个表的简单查询和关于时间函数的相关问题&#xff0c;下面要进行复合查询的相关内容。 这里要使用卡笛尔集的概率让两个表融合成为一个表。 需要使用相应的字…

vue项目为例解决element ui 时间选择器 picker使用样式穿透不起作用问题

今天在开发中 需要修改时间选择器弹出的这个组件的样式 但这个东西比较坑爹 首先 不能影响其他组件 就是其他组件用了时间选择器 不能受到我们写的样式的影响 那么 就只好穿透了 但你会发现 这东西是作用与body下的 就很坑 穿透我试了挺久的 不起作用 但官方文档有提供给我们一…

centos7 配置 sftp 服务器并通过 java 上传文件

虚拟机配置 1、创建sftp用户组 groupadd sftp2、添加用户 useradd -g sftp mysftp3、设置用户密码 passwd mysftp4、创建文件根目录 mkdir /app/data5、将该目录设置到用户上 usermod -d /app/data mysftp6、修改配置文件 vim /etc/ssh/sshd_config7、找到 Subsystem &am…

算法记录 | Day50 动态规划

123.买卖股票的最佳时机III 思路&#xff1a; 1.确定dp数组以及下标的含义 最多可完成两笔交易意味着总共有三种情况&#xff1a;买卖一次&#xff0c;买卖两次&#xff0c;不买卖。 具体到每一天结束总共有 5 种状态&#xff1a; 未进行买卖状态&#xff1b;第一次买入状…

手动封装一个日期处理工具类,几乎覆盖了所有的时间操作(收藏)

工具类包含以下方法&#xff1a; - stringToDate: 将字符串转换为java.util.Date类型- dateToString: 将java.util.Date类型转换为字符串- stringToLocalDateTime: 将字符串转换为LocalDateTime类型- localDateTimeToString: 将LocalDateTime类型转换为字符串- dateToLocalDat…

01-Java 核心基础

Java核心基础 Java 开发基础知识Java 语言概述安装 Java 开发环境 开发体验Hello World 程序Java 注释 Java 开发基础知识 Java 语言概述 Java 是 SUN&#xff08;斯坦福大学网络公司&#xff09;1995 年推出的一门高级编程语言&#xff0c;它是一种面向 Internet 的编程语言&…

医院检验信息管理系统源码(云LIS系统源码)JQuery、EasyUI

云LIS系统是一种医疗实验室信息管理系统&#xff0c;提供全面的实验室信息管理解决方案。它的主要功能包括样本管理、检测流程管理、报告管理、质量控制、数据分析和仪器管理等。 云LIS源码技术说明&#xff1a; 技术架构&#xff1a;Asp.NET CORE 3.1 MVC SQLserver Redis等…

【虹科案例】使用 TCP 分析测量握手时间

如何使用 Allegro Network 万用表的 TCP 分析确定握手时间 握手需要多少时间&#xff1f; 在图 1 中&#xff0c;您可以在虹科Allegro 网络万用表的 TCP 统计数据中看到过去 10 分钟的客户端握手次数。在这里&#xff0c;您可以清楚地看到在指定时间段内有延长的响应时间。但…

计算机专业基础知识

大纲分单元讲解计算机的发展、类型及其应用领域计算机技术的发展计算机应用领域 计算机中数据的表示、存储和处理计算机软、硬件系统的组成及主要技术指标计算机软、硬件系统的组成硬件系统软件系统系统软件应用软件 计算机的结构计算机主要性能指标 自我测试 大纲 计算机的发…

Window 10 环境下用 OpenVINO 2022.3部署yolov5 7.0

Window 10 环境下用 OpenVINO 2022.3部署yolov5_7.0 1 下载并解压 OpenVINO Runtime OpenVINO™ Runtime 2022.3 以压缩包 (OpenVINO Archives) 的形式提供。 下载地址&#xff1a; storage.openvinotoolkit.org 下载后解压到 C:\Intel\openvino_2022.3.0 配置环境&#xff…

【STL模版库】STL入门 {模版初阶:泛型编程,函数模版,类模版;STL简介:什么是STL,STL六大组件}

一、模版初阶 1. 泛型编程 如何实现一个通用的交换函数呢&#xff1f; void Swap(int& left, int& right) { int temp left; left right; right temp; } void Swap(double& left, double& right) { double temp left; left right; right temp; } void…

【Python习题集5】函数的设计

函数的设计 一、实验内容二、实验总结 一、实验内容 1.编写两个函数分别按单利和复利计算利息&#xff0c;根据本金、年利率、存款年限得到本息和和利息。调用这两个函数计算1000元在银行存3年&#xff0c;在年利率是6%的情况下&#xff0c;单利和复利分别获得的本息和和利息。…

【Java虚拟机】JVM垃圾回收器详解

1.什么是垃圾收集器 垃圾回收算法是内存回收的方法论&#xff0c;垃圾收集器则是内存回收的具体实现 目前Java规范中并没有对垃圾收集器的实现有任何规范 不同的厂商、不同的版本的虚拟机提供的垃圾收集器是不同的&#xff0c;主要讨论的是HotSpot虚拟机 不存在最厉害的垃圾…

【Java】内部类Object类

目录 1.内部类 1.1实例内部类 1.2静态内部类 1.3局部内部类 1.4匿名内部类 2.Object类 2.1getClass方法 2.2equals方法 2.3hashcode方法 1.内部类 定义&#xff1a;一个类定义在另一个类或一个方法的内部&#xff0c;前者称为内部类&#xff0c;后者称为外部类。 分…

JWT渗透与防御

JWT渗透与防御 什么是JWTJWT漏洞介绍工具使用 身份认证(Authentication)又称鉴权&#xff0c;是指通过一定的手段&#xff0c;完成对用户身份的确认。认证的方式&#xff1a;sessioncookie、JWT、Token session认证的局限性 session认证机制需要配合cookie才能实现。由于cookie…

238页9万字大数据治理与服务平台建设及数据服务实施方案(word)

本资料来源公开网络&#xff0c;仅供个人学习&#xff0c;请勿商用&#xff0c;如有侵权请联系删除。 1 项目解决方案 1.1 建设类业务技术方案 1.1.1 业务需求分析 根据对招标要求的理解&#xff0c;建设业务需求主要包括如下几个方面&#xff1a; &#xff08;1&#xff…

网站遭遇XSS注入如何排查及解决

首先要明白什么是XSS注入 存储型 XSS 的攻击步骤&#xff1a; 攻击者将恶意代码提交到目标网站的数据库中。用户打开目标网站时&#xff0c;网站服务端将恶意代码从数据库取出&#xff0c;拼接在 HTML 中返回给浏览器。用户浏览器接收到响应后解析执行&#xff0c;混在其中的…

Docker部署spring boot项目

在docker部署时首先要保证一般部署能够访问。 docker命令部署spring boot项目 目前主流的java框架为spring&#xff0c;软件包为jar包&#xff0c;只需以jar为基础构建容器环境。打包为jar后只需要jvm就可以运行&#xff0c;因此需要以jdk为镜像构建容器。 基于命令构建jdk环…