ts学习基础篇(一)

news2024/11/19 8:46:22

旨在记录!
这篇人都学废了,本想记录常用类型,越学越多,每一个都很重要…

  • 一、string: 字符串类型
  • 二、number: 数字类型
  • 三、boolean: 布尔值
  • 四、array:数组
  • 五、tuple: 元组
  • 六、字面量
  • 七、object:对象
  • 八、any: 任意类型
  • 九、unknown: 类型安全的any
  • 十、void: 用来表示空
  • 十一、never: 不会出现的值,没有值,没有返回结果
  • 十二、enum: 枚举。用于定义数值集合
  • 十三、& 同时满足
  • 十四、type: 类型别名
    • 1. 基本类型示例
    • 2. 对象示例
    • 3. 联合类型示例
    • 4. 函数示例
    • 5. 元组示例
  • 十五、 let、var、const 声明
    • 1. let 声明
    • 2. const 声明
  • 十六、解构
    • 1. 数组解构
    • 2. 对象解构
  • 十七、类型保护【类型断言|联合类型|交叉类型】
    • 1. 类型断言: as
    • 2. 联合类型:|
    • 3. 交叉类型: &

🔸图表总结🔸

编号类型关键字语法示例说明
1string变量名:stringlet name:string字符串类型
2number变量名:numberlet age:number数字类型
3boolean变量名:booleanlet isShow:boolean布尔值
4array类型[]let names: []; | Array<类型>数组
5元组tuple[类型,类型,类型]let subject: [string, string, number,]元组就是固定长度的数组
6字面量变量名:字面量值let name: ‘小白’ | aa;使用字面量作为具体类型时,取值就必须是该字面量的值
7obejct变量名:objectlet test:object对象; [propName: any] 添加任意属性
8any变量名:anylet test:any不清楚类型可使用
9unknown变量名:unknownlet test:unlnown类型安全的any
10void变量名:voidlet test:void表示空。函数中表示没有返回值
11never-不会出现的值,没有值函数中表示没有返回值
12enum-enum Sex { woman, man}枚举。用于定义数值集合
13&--同时满足
14typetype 变量 = 值type name = “小白” | “小黑”类型别名
15let/var/constlet 变量名 | var 变量名 | const 变量名-声明变量
16解构-数组解构 | 对象解构 | 数组展开 | 对象展开将声明的一组变量与相同结构的数组或者对象的元素值一一对应
17类型保护-类型断言|联合类型|交叉类型-

一、string: 字符串类型

可使用${expr}形式嵌入表达式或变量

在这里插入图片描述

    // 示例:
    // ${expr}

    let name: string = 'angular';
    let output: string = `${name}是一个框架;`;

    console.log(output); // angular是一个框架;

二、number: 数字类型

在这里插入图片描述


三、boolean: 布尔值

在这里插入图片描述


四、array:数组

语法:

  1. 类型 [ ]
  2. Array<类型>

1. 类型 [ ]

    let names: string[]; //数组内全部类型都为 string 类型
    names = ["aa", "bb"];

2. Array<类型>

    let ages: Array<number>; //数组内全部类型都为 number 类型
    ages = [11, 22, 33];let infos: any[]; //数组内可以使用任意类型的值
    infos = [
      { name: 'aa', age: 11 },
      { name: 'bb', age: 22 }
    ]

五、tuple: 元组

元组类型:

  1. 元组就是固定长度的数组。
  2. 表示已知元素数量和类型的数组。(各类型元素不必相同)
  3. 语法:[类型,类型,类型];
    // 数组的长度和类型必须对上

    let subject: [string, string, number, string];
    
    subject = ['小a', '小b', 3, '小d']

六、字面量

使用字面量作为具体类型时,取值就必须是该字面量的值

在这里插入图片描述


七、object:对象

1. 基础用法

    let demoObj: object;
    demoObj = {}; //success
    demoObj = { name: 'abc', age: 11 }; //success

2.   ?

    let demoObj: { name: string, age?: number }; // ? 表示该属性可有可无
    demoObj = { name: 'abc' }; // 如果没有 ?,该对象会报错 

3.   [propName: any] 添加任意属性

  1. 允许添加新的任意属性,一旦定义了任意属性,那么确定属性和可选属性的类型都必须是它的类型的子集
  2. 写法: [propName: string]: number | string | boolean | Array | any;
     // type:string:表示属性的值只能为string 同理···
     let demoObj: { name: string, age: number, [propName: string]: any; };                    
         demoObj = { name: 'abc', age: 11, sex: '男' }; // success
     // demoObj没有定义"sex"属性,propName可以添加任何未知参数


八、any: 任意类型

    let demoObj: any;
    demoObj = "abc"; // success
    demoObj = 123; // success
    demoObj = ['aa', 'bb']; //success
    demoObj = { name: 'abc', age: 11 }; //success

九、unknown: 类型安全的any

  1. unknown的变量不能直接赋值给其他变量
   // demoObj虽然赋值为string类型,同为string类型的name还是赋值失败
    let demoObj: unknown;
    let name: string;
    
    demoObj = "abc"; // success
    name = demoObj; //error

在这里插入图片描述


十、void: 用来表示空

(1)以函数为例,表示该函数没有返回值

 setLog(): void {
    return "here some text"; // error
    return undefined; // success
    return null; // success
    return; // success
  }

在这里插入图片描述

(2)属性

    let demo: void;
    demo = "abc"; //error
    demo = 123; //error
    demo = undefined; // success
    demo = null; //success

在这里插入图片描述


十一、never: 不会出现的值,没有值,没有返回结果

抛出异常

  setLog(): never {
    return "here some text"; // error
    return undefined; // error
    return null; // error
    return; // error
    console.log("ceshi")  //添加打印语句也会报错
    
    throw new Error('error'); //success
  }

在这里插入图片描述在这里插入图片描述


十二、enum: 枚举。用于定义数值集合

  1. 枚举默认下标是0,可以手动修改枚举下标值
  2. 枚举成员默认分配数字,可以修改为字符串枚举
  3. 枚举:把值一一列举,取值的时候只有这几个可以使用

(1)基础用法

// 定义一个枚举类型
enum Sex {
  woman, man
  // 0,1
}

export class OtherComponent implements OnInit {
  constructor() { }
  ngOnInit() {

    let person: { name: string, sex: Sex }
    person = { name: 'abc', sex: Sex.man }
    console.log(person)
    // {name: 'abc', sex: 1}
  }
}

(2)手动修改枚举下标值

enum Sex {
  woman = 2, man, normal = 6
  // 2,3,6
}

export class OtherComponent implements OnInit {
  constructor() { }
  ngOnInit() {
    console.log(Sex)
    // 完整的输出:{2: 'woman', 3: 'man', 6: 'normal', woman: 2, man: 3, normal: 6}

    console.log(Sex["2"]) //woman
    console.log(Sex.man) //3
  }

}

(3)定义枚举值为字符串

enum Sex {
  Woman = "woman",
  man = "man",
  normal = "normal"
}

export class OtherComponent implements OnInit {
  constructor() { }
  
  ngOnInit() {
    console.log(Sex)
    // 完整的输出:{Woman: 'woman', man: 'man', normal: 'normal'}
    
    console.log(Sex.Woman) // woman
    console.log(Sex.man) // man
    // 这样值就变成了更具有含义的字符串了
  }
}

十三、& 同时满足

    let person: { name: string } & { age: number };
    person = { name: 'abc', age: '11' }; // error
    person = { name: 'abc', age: 11 }; // success

在这里插入图片描述


十四、type: 类型别名

给类型取一个新的名字,来引用类型。多用于联合类型
语法:
type 变量 = 值

1. 基本类型示例

    type Name = string;
    let newName: Name = 123; // 报错:不能将类型“number”分配给类型“string”。
    let newName: Name = "abc"; // success
	let number1: 1 | 2 | 3 | 4 | 5;
	let number2: 1 | 2 | 3 | 4 | 5;
	// number1,number2 取值完全一样,可以使用类型别名
	
	type numberTpe = 1 | 2 | 3 | 4 | 5;
	
	let number1: numberTpe;
	let number2: numberTpe;
	number1 = 3; // success
	number2 = 6; // error 不在取值范围内

在这里插入图片描述

2. 对象示例

 type Person = { name: string, age?: number };
 let newPerson: Person = { name: '小a', age: 1 }; // success

3. 联合类型示例

    type Person = string | number | boolean;
    let name: Person = '小白'; //success
    let age: Person = 12; // success
    let isMan: Person = false; //success

4. 函数示例

    type Person = () => string;

    let newPerson: Person = () => '人类'; 

5. 元组示例

    type Person = [string, number];
    let man: Person = ["小白", 1]; // ['小白', 1]

十五、 let、var、const 声明

1. let 声明

  1. 只在当前块级作用域内有效
  2. 不能在声明之前赋值
  3. let声明变量

示例一:基本用法

// b只在if语句内有效
  demo(isTrue: boolean) {
    let txt = "hello";
    if (isTrue) {
      let b = '你好';
      console.log(txt);
      return b;
    }
    console.log(b); // error b在函数体内未被定义;
  }

在这里插入图片描述
示例2:未声明之前赋值

 demo(isTrue: boolean) {
    txt = 'hi'; //error
    let txt = "hello";
    if (isTrue) {
      let b = '你好';
      console.log(txt);
      return b;
    }
    console.log(b);
  }

在这里插入图片描述
示例3:不允许重复声明
在这里插入图片描述
以重复声明,使用最后声明的那个值;

    var txt = 1;
    var txt = 2;
    console.log(txt); //2

2. const 声明

  1. const声明是常量。
  2. 与let声明相似。与let同样的作用域规则,但常量不能被重新赋值。
  3. 如果常量定义的是对象,对象中的属性值可被重新赋值。

示例1: 常量重新赋值

	const name = 'abc';
	name = 'xiaohuang'; // error

在这里插入图片描述
示例2: 常量对象重新赋值

对常量对象中的属性值重新赋值。

        const person = { name: "abc", age: 11 };
	    person = { name: "xiaohua", age: 13 }; //error 直接改变对象报错
	    person.name = "dahuang";
	    person.age = 15;
	    console.log(person); // success {name: 'dahuang', age: 15}

在这里插入图片描述


十六、解构

将声明的一组变量与相同结构的数组或者对象的元素值一一对应,并将变量相对应的元素进行赋值。

1. 数组解构

    let array = [1, 2, 3];
    let [one, two] = array;
    console.log(one, two); // 相当于 array[0],array[1] 1,2

1.1 变量交换


    let array = [1, 2, 3];
    let [one, two] = array;

    [one, two] = [two, one]; //变量交换

    console.log(one, two); // 2,1

1.2 用于函数参数

  ngOnInit() {

    let array = [1, 2];
    let [one, two] = array;

    this.test([one, two]);

  }

  test([one, two]: [number, number]) {
    console.log(one + two); //3
  }

1.3 “…” 语法:展开操作符

  1. 用于创建可变长的参数列表
  2. 创建剩余变量
    let array = [1, 2, 3, 4, 5];
    let [one, ...two] = array;

    console.log(one); // 1
    console.log(two); // [2,3,4,5]

可以忽略不关心的尾随元素或其它元素

    let array = [1, 2, 3, 4, 5];
    let [one, ...two] = array;
    let [, second, , fourth] = array;

    console.log(second); // 2
    console.log(fourth); // 4

2. 对象解构

    let object = { top: 10, right: 20, bottom: 30, left: 40 };
    let { top, right, bottom, left } = object;

    console.log(top, right, bottom, left); // 10 20 30 40

2.1 对象赋值给自定义变量

将对象中的属性赋值给自定义变量(属性重命名)

    let object = { top: 10, right: 20, bottom: 30, left: 40 };
    let { top: up, right, bottom: dowm, left } = object;
    /* 
      相当于:let up = object.top;
              let down = object.bottom;
    */
    console.log(up, right, dowm, left); // 10 20 30 40

对象解构的写法中,等号左边写法类似一个对象,不过属性名对应的不是值,是要赋值的变量名。

// 左边是解构,右边是对象
let { top: up, bottom: dowm } = { top: 10, bottom: 20 };

2.2 展开对象
展开对象后,相同的属性名重新赋值后会覆盖原属性

    let object = { top: 10, right: 20, bottom: 30, left: 40 };

    let test = { ...object, top: "up" };

    console.log(test); // {top: 'up', right: 20, bottom: 30, left: 40}

展开对象后,不属于原对象的属性会新增在对象中

    let object = { top: 10, right: 20, bottom: 30, left: 40 };

    let test = { ...object, name: "ha" };

    console.log(object); // { top: 10, right: 20, bottom: 30, left: 40 };
    console.log(test); // {top: 10, right: 20, bottom: 30, left: 40, name: 'ha'}

十七、类型保护【类型断言|联合类型|交叉类型】

1. 类型断言: as

  1. 类型断言:断定这个类型是什么,来告诉解析器变量的实际类型(指定一个值的类型)
  2. 语法:值 as 类型 或者 <类型>值

(1) as 语法

语法:变量 as 类型

    demoObj = "abc"; // success
    name = demoObj as string; //success

(2)“尖括号” 写法

    let stringValue: any = 'hello lv luo';
    let stringLength: number = (<string>stringValue).length;

2. 联合类型:|

  1. 对象多种类型(例如身份证:有的身份证中含x字母,有的是纯数字。因此可以使用联合类型)
  2. 语法:类型a | 类型b
  3. 类型之间是“或”的关系
 let IDCard = number | string;

3. 交叉类型: &

  1. 将多个类型合并成一个类型
  2. 合并后的类型将包含所有合并前的类型的全部成员和特性
    interface a { name: string };
    interface b { age: number };

    type User = a & b; // user:{name:string, age:number};

    let user: User = { name: 'aa', age: 13 }; // succness
    

参考链接:

  1. TypeScript类型1
  2. TypeScript 基础学习指南

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

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

相关文章

【KingFusion】用趋势曲线组件实现实时曲线的步骤

哈喽&#xff0c;大家好&#xff0c;我是雷工&#xff01; 本节学习测试用KingFusion趋势曲线组件实现电流的实时曲线的展示。 一、效果演示&#xff1a; 展示实时曲线的运行效果&#xff0c;效果为KingFunsion3.6通过KingIOServer连接现场系统中实际数据的演示效果。 二、…

代码随想录-单调栈|ACM模式实践

代码随想录感想 ​​​​​​739. 每日温度 题目描述&#xff1a; 输入输出示例&#xff1a; 思路和想法&#xff1a; 496. 下一个更大元素 I 题目描述&#xff1a; 输入输出示例&#xff1a; 思路和想法&#xff1a; 503. 下一个更大元素 II 题目描述&#xff1a; …

我开源了团队内部基于SpringBoot Web快速开发的API脚手架stater

我们现在使用SpringBoot 做Web 开发已经比之前SprngMvc 那一套强大很多了。 但是 用SpringBoot Web 做API 开发还是不够简洁有一些。 每次Web API常用功能都需要重新写一遍。或者复制之前项目代码。于是我封装了这么一个 抽出SpringBoot Web API 每个项目必备需要重复写的模块…

【100天精通python】Day3:python的基本数据类型和数据类型转换

一. python的基本数据类型 以下是一些常见的举例和详细解释&#xff1a; 整数&#xff08;int&#xff09;&#xff1a;表示整数值。例如&#xff1a; x 5&#xff1a;将整数值5赋给变量x。 y -10&#xff1a;将整数值-10赋给变量y。 浮点数&#xff08;float&#xff09;&a…

【聚焦机器学习与实践经验的实用指南——《Python机器学习项目实战》】

《Python机器学习项目实战》引领大家在构建实际项目的过程中&#xff0c;掌握关键的机器学习概念!使用机器学习&#xff0c;我们可完成客户行为分析、价格趋势预测、风险评估等任务。要想掌握机器学习&#xff0c;需要有优质的范例、清晰的讲解和大量的练习。本书完全满足这三点…

漏洞复现-CVE-2022-24112原理与复现

目录 漏洞原理漏洞描述影响范围 apisix学习漏洞复现config.yaml环境搭建exp代码 入侵检测与修复总结参考 漏洞原理 漏洞描述 An attacker can abuse the batch-requests plugin to send requests to bypass the IP restriction of Admin API. A default configuration of Apa…

基于JavaSwing+MySQL的电影票购票管理系统

点击以下链接获取源码&#xff1a; https://download.csdn.net/download/qq_64505944/88051172?spm1001.2014.3001.5503 JDK1.8 MySQL5.7 功能&#xff1a;管理员与用户两个角色登录&#xff0c;管理员可以对电影进行增删改查处理&#xff0c;可以对影院增删改查管理&#x…

【C语言】类型转换和优先级

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前正在回炉重造C语言&#xff08;2023暑假&#xff09; ✈️专栏&#xff1a;【C语言航路】 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你…

【Linux系统编程】Linux第一个小程序——进度条

文章目录 1. 对回车&#xff08;\r&#xff09;和换行&#xff08;\n&#xff09;的理解1.1 概念理解1.2 测试 2. 缓冲区的理解2.1 观察现象2.2 原因解释 3. 倒计时小程序4. 进度条小程序4.1 基本思路及实现4.2 改进及优化4.3 增加百分比显示4.4 增加旋转光标4.5 给进度条配色 …

基于FT232HL的USB2.0转ARINC429板卡

基于FT232HL的USB2.0转ARINC429板卡 1 概述 《USB2.0转ARINC429板卡》采用底板子板&#xff0c;层叠安装的结构&#xff1b;使用同样的底板&#xff0c;变换不同功能的子板实现不同的功能版本。 a) 降低硬件设计复杂度&#xff1a;新板卡设计只需要设计子板&#xff0c;子板的…

类和对象(C++)( static成员、explicit、友元、内部类、匿名对象)

类和对象 static成员概念static成员“登场”特性static成员使用 注意 explicit从一段代码引入explicit和explicit相关特性 友元友元函数引入问题解决 小结 友元类 内部类概念特性 匿名对象引入使用 static成员 概念 类的静态成员&#xff1a;声明为static的类成员。 静态成员变…

【黑客】网络安全靠自学?只会毁了你!

1️⃣网安现状 ❗本文面向所有 想要涉足网安领域 或 已经涉足但仍处在迷茫期 的伙伴&#xff0c;如果你月薪达到了3w&#xff0c;那么请你离开。 如果没有&#xff0c;希望你继续看下去&#xff0c;因为你人生的转折点将从这篇文章开始。 ✈️网络安全&#xff0c;一个近几年大…

5 个能出色完成数据恢复的免费数据恢复软件知识分享。

有时&#xff0c;由于意外删除或某些问题&#xff0c;您可能会丢失 Windows 10 笔记本电脑或台式机上的重要数据。Windows 操作系统不提供任何内部工具来恢复已删除的数据。但是有一些非常好的数据恢复软件可以更专业地完成这项工作。最好的人总是有报酬的&#xff0c;但不用担…

按键精灵、auto.js等一些移动端脚本 如何连接云服务器的数据库, 进行读写操作

一、技术背景 按键手机版和auto.js&#xff0c;只支持连接本地数据库sqllite&#xff0c;该数据库只存在本地 其他设备无法读写&#xff0c;就像本地的txt一样。 而很多脚本作者的需求是&#xff1a;多个脚本&#xff0c;甚至在全国不同城市的脚本也能读取和写入同一批数据&…

AJAX-day01

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 AJAX 概念和 axios 使用 什么是 AJAX 怎么用 AJAX &#xff1f; axios 使用 认识 URL 什么是 URL&…

韦东山Linux教学视频中的makefile文件详细介绍

前言 &#xff08;1&#xff09;在学习韦东山Linux教学视频的时候&#xff0c;他的makefile并没有做详细的介绍。以至于我学了很长时间对他的makefile文件不理解。所以本文将会详细介绍韦东山Linux教学视频中的makefile文件含义。 &#xff08;2&#xff09;注意&#xff1a;我…

使用 docker-compose 部署 Jenkins

注&#xff1a;我是在虚拟机&#xff08;Ubuntu&#xff09;上部署了 docker-compose&#xff0c;然后才使用 docker-compose 部署 Jenkins&#xff01; 关于如何在 Ubuntu 部署 docker-compose&#xff0c;可以看我其它的文章。 本文目录 1. 创建 docker_jenkins_compose 目录…

【NI USRP】每一个USRP是如何命名的呢,和原厂Ettus型号有什么关联呢?

详细的硬件配置&#xff0c;非常有助于设备的选型。 如果您采购了X310子板&#xff0c;是可以将其转化为对应的USRP型号的设备。 B系列 EttusNI-USRP频段最大带宽通道B200mini无70 MHZ - 6 GHZ56 MHz1X1B200mini-i无70 MHZ - 6 GHZ56 MHz1X1B205mini-i无70 MHZ - 6 GHZ56 MHz…

三菱以太网通讯模块在哪

捷米特JM-ETH-FX采用工业级设计&#xff0c;导轨安装&#xff0c;带通讯线。不占用PLC编程口&#xff0c;上位机通过以太网对PLC数据监控的同时&#xff0c;触摸屏可以通过复用接口X2与PLC进行通讯。捷米特JM-ETH-FX支持工控领域内绝大多数SCADA软件&#xff0c;支持三菱MC以太…

C#开发的OpenRA游戏之维修按钮

C#开发的OpenRA游戏之维修按钮 前面分析物品的变卖按钮,如果理解这个流程,再看其它按钮的流程,其实是一样的,所以前面的文章是关键,只有理解通透的基础之上,才能继续往下。 维修按钮的存在价值,就是当建筑物受到敌方破坏,还没有完全倒掉之前,可以使用金币来进行修理。…