lesson01_ts知识回顾

news2024/12/23 6:19:10

基本数据类型

undefinednull 可赋值给其他基本数据类型

let num: number = 3;
let flag: boolean = false;
let str: string = "abc";

let a: null = null;
let b: undefined = undefined;

联合数据类型

let variable: number | boolean = false;
variable = 123;

数组

伪数组不能赋值给数组,数据类型是any[]也不行

let arrOfNumbers: number[] = [1, 2, 3, 4];
arrOfNumbers.push(5);
// 若push其他数据类型会报错

function test() {
	console.log(arguments);
}

元组Tuple

// 多一项少一项都会报错
let user: [string, number] = ['viking', 20];

Interface 接口

  • 对对象的形状(shape)进行描述
  • 对类(class)进行抽象
  • Duck Typing(鸭子类型)

?可选属性
readonly只读属性,创建时赋值

const 用在变量上边
readonly用在属性上边

// 用分号进行分割
interface Person {
	readonly id: number;
	name: string;
	age?: number;
}

let viking: Person = {
	id: 1111,
	name: 'viking',
	age: 20
}

函数和类型推断

可选参数只能放在后边
函数声明

function add(x: number, y: number, z?: number): number {
	if (typeof z === 'number') {
		return x + y + z;
	}
	else {
		return x + y;
	}
}

函数表达式

const add = function(x: number, y: number, z?: number): number {
	if (typeof z === 'number') {
		return x + y + z;
	}
	else {
		return x + y;
	}
}
const add2: (x: number, y: number, z: number) => number = add

类class

privatepublicprotectedreadonlystatic

class Animal {
	// name不能被修改
	readonly name: string,
	// 没有实例也可以调用的静态属性
	static isAnimal (a) {
		return a instanceof Animal;
	}
	constructor(name: string) {
		this.name = name;
	}
	run() {
		return `${this.name} is running`;
	}
}

const snake = new Animal('snake');
console.log(snake.run());

class Dog extends Animal {
	bark() {
		return `${this.name} is barking`;
	}
}
const dog = new Dog('dog');

class Cat extends Animal{
	constructor(name){
		super(name);
		console.log(this.name);
	}
	// 方法重写
	run() {
		return 'Meow, ' + super.run();
	}
}

特性抽取

interface Radio {
	switchRadio(): void;
}
interface Battery {
	checkBatteryStatus(): void;
}
interface RadioWithBattery extends Radio {
	checkBatteryStatus(): void;
}
class Car implements Radio {
	switchRadio() {

	}
}
// class Cellphone implements RadioWithBattery 
class Cellphone implements Radio, Battery {
	switchRadio{
		
	}
	checkBatteryStatus() {
	}
}

枚举

enum Direction {
	Up,
	Down,
	Left,
	Right
};
console.log(Direction.Up);
console.log(Direction[0]);

js赋值运算符返回的是被赋予的值

console.log(Direction['Up'] = 0);  // 0

编译后的js文件
在这里插入图片描述

enum Direction {
	Up = 'UP',
	Down = 'DOWN',
	Left = 'LEFT',
	Right = 'RIGHT'
};
const value = 'UP';
if (value === Direction.Up) {
	console.log('go up')
}

常量枚举

const enum Direction {
	Up = 'UP',
	Down = 'DOWN',
	Left = 'LEFT',
	Right = 'RIGHT'
};
const value = 'UP';
if (value === Direction.Up) {
	console.log('go up')
}

编译后的js文件,直接显示Direction.Up对应的变量,而不显示枚举建立的过程
在这里插入图片描述

泛型

基础用法

function echo<T>(arg: T): T {
	return arg;
}

function swap<T, U> (tuple: [T, U]): [U: T] {
	return [tuple[1], tuple[0]];
}
const res = swap(['str', 123]);

约束泛型

function echoWithArr<T>(arg: T[]): T[] {
	console.log(arg.length);
	return arg;
}
const arrs = echoWithArr([1, 2, 3]);

所有有length属性的均可

interface IWithLength {
	length: number;
}
function echoWithLength<T extends IWithLength>(arg: T): T {
	console.log(arg.length);
	return arg;
}

echoWithLength('str');
echoWithLength({length: 10});
echoWithLength([1, 2, 3]);

类和接口

// 限制只有一种数据类型的队列
class Queue<T> {
	private data = [];
	push(item: T) {
		return this.data.push(item);
	}
	pop(): T {
		return this.data.shift();
	}
}

const queue = new Queue<number>();
queue.push(1);
console.log(queue.pop().toFixed());

const queue2 = new Queue<string>();
queue.push('str');
console.log(queue.pop().length);
interface KeyPair<T, U> {
	key: T;
	value: U;
}

let kp1: KeyPair<number, string> = {key: 123, value: 'str'};
let kp2: KeyPair<string, number> = {key: 'str', value: 123};

ts封装的大写类型

let arr: number[] = [1, 2, 3];
let arr2: Array<number> = [1, 2, 3];

interface写的函数类型

interface IPlus<T> {
	(a: T, b: T): T;
}
function plus(a: number, b: number): number {
	return a + b;
}
function connect(a: string, b: string): string {
	return a + b;
}
const a: IPlus<number> = plus;
const b: IPlus<string> = connect;

类型别名

type aliases

function sum(x: number, y: number): number {
	return x + y;
}
const sum2: (x: number, y: number) => number = sum;
type PlusType = (x: number, y: number) => number
function sum(x: number, y: number): number {
	return x + y;
}
const sum2: PlusType = sum;

type NameResolver = () => string
type NameOrResolver = string | NameResolver  // 联合类型
function getName(name: NameOrResolver) {
	if (typeof n === 'string') {
		return n;
	}
	else {
		return n();
	}
}

类型断言 as

type assertion
只能断言为定义的类型,若联合类型中未出现的类型断言会报错

function getLength(input: string | number): number {
	const str = input as String;
	if (str.length) {
		return str.length;
	}
	else {
		const number = input as Number
		return number.toString().length;
	}
}
function getLength(input: string | number): number {
	if ((<string>input).length) {
		return (<string>input).length;
	}
	else {
		return input.toString().length;
	}
}

声明文件

引用三方库时编译器给予提示
jQuery.d.ts单独的声明文件

declare var jQuery: (selector: string) => any

但是三方库会提供声明文件,可进行单独安装
在这里插入图片描述
typesearch
在这里插入图片描述
现在的安装包一般都会带有type类型,所以无需特意安装

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

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

相关文章

指针的进阶【中篇】

文章目录&#x1f4c0;4.数组参数&#x1f4bf;4.1.一维数组传参&#x1f4bf;4.2.二维数组传参&#x1f4c0;5.指针参数&#x1f4bf;5.1.一级指针传参&#x1f4bf;5.2.二级指针传参&#x1f4c0;6.函数指针&#x1f4bf;6.1. 代码1&#x1f4bf;6.2. 代码2&#x1f4c0;7.函…

Linux 进程:理解进程和pcb

目录一、进程的概念二、CPU分时机制三、并发与并行1.并发2.并行四、pcb的概念一、进程的概念 什么是进程&#xff1f; 进程就是进行中的程序&#xff0c;即运行中的应用程序。比如&#xff1a;电脑上打开的LOL、QQ…… 这些都是一个个的进程。 什么是应用程序&#xff1f; 应用…

【java基础】static和final关键字的作用及其用法详解

文章目录static关键字静态字段静态方法静态代码块静态内部类final关键字final字段final方法final类static关键字 这个关键字表示静态的&#xff0c;用于不同地方意思不一样 静态字段 如果我们将其作用到字段上&#xff0c;那么该字段为类所拥有&#xff0c;我们使用new关键字…

【Node.js】 Express编写接口和跨域解决的方法!

Node.jsExpress编写接口接口跨域问题使用cors中间件解决跨域问题CORS响应头分类&#xff1a;CORS请求分类&#xff1a;编写JSONP接口Express编写接口 注意想获取URl-encoded格式的请求体数据&#xff0c;必须配置中间件app.use(express.urlencoded({extended:false}))创建api路…

动态规划:leetcode 1049.最后一块石头的重量II、494.目标和、474.一和零

leetcode 1049.最后一块石头的重量IIleetcode 494.目标和leetcode 474.一和零leetcode 1049.最后一块石头的重量II有一堆石头&#xff0c;每块石头的重量都是正整数。每一回合&#xff0c;从中选出任意两块石头&#xff0c;然后将它们一起粉碎。假设石头的重量分别为 x 和 y&am…

【算法经典题集】递归(持续更新~~~)

&#x1f63d;PREFACE&#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐ 评论&#x1f4dd;&#x1f4e2;系列专栏&#xff1a;算法经典题集&#x1f50a;本专栏涉及到的知识点或者题目是算法专栏的补充与应用&#x1f4aa;种一棵树最好是十年前其次是现在1.递归1.1 递归实现…

【JAVA】常见的七大排序

前言&#xff1a;本篇主要介绍常见的七大排序&#xff0c;实现语言为Java&#xff0c;其主要分为&#xff1a;直接插入排序&#xff0c;希尔排序&#xff0c;直接选择排序&#xff0c;堆排序&#xff0c;冒泡排序&#xff0c;快速排序&#xff0c;归并排序。 在介绍七大排序之前…

【多尺度密集递归融合网络:超分】

A novel image super-resolution algorithm based on multi-scale dense recursive fusion network &#xff08;基于多尺度密集递归融合网络的图像超分辨率算法&#xff09; 随着卷积神经网络(CNN)技术的成熟度,超限分辨的图像重建(SR)方法基于CNN正在蓬勃发展,取得了许多显…

RIP路由协议的更新(电子科技大学TCP/IP第二次实验)

一&#xff0e;实验目的 1、掌握 RIP 协议在路由更新时的发送信息和发送方式 2、掌握 RIP 协议的路由更新算法 二&#xff0e;预备知识 1、静态路由选择和动态路由选择 2、内部网关协议和外部网关协议 3、距离向量路由选择 三&#xff0e;实验原理 RIP 协议&#xff08…

使用Python进行数据分析——线性回归分析

大家好&#xff0c;线性回归是确定两种或两种以上变量之间互相依赖的定量关系的一种统计分析方法。根据自变量的个数&#xff0c;可以将线性回归分为一元线性回归和多元线性回归分析。一元线性回归&#xff1a;就是只包含一个自变量&#xff0c;且该自变量与因变量之间的关系是…

AMBA-AXI(一)burst 传输-INCR/WRAP/Fixed

&#x1f4a1;Note&#xff1a;本文是根据AXI协议IHI0022F_b_amba_axi_protocol_spec.pdf&#xff08;issue F&#xff09;整理的。主要是分享AXI3.0和4.0部分。如果内容有问题请大家在评论区中指出&#xff0c;有补充或者疑问也可以发在评论区&#xff0c;互相学习&#x1f64…

JUC 体系的基石——AQS

—— AQS&#xff08;AbstractQueuedSynchronizer&#xff09; 概念 抽象队列同步器&#xff1b;volatile cas 机制实现的锁模板&#xff0c;保证了代码的同步性和可见性&#xff0c;而 AQS 封装了线程阻塞等待挂起&#xff0c;解锁唤醒其他线程的逻辑。AQS 子类只需要根据状…

182、【动态规划/数组】leetcode ——647. 回文子串:动态规划+双指针(C++版本)

题目描述 原题链接&#xff1a;647. 回文子串 解题思路 &#xff08;1&#xff09;动态规划 动态规划的思路是每次判定子串两端对称位置是否相等&#xff0c;然后再基于已有的内侧对称情况判定是否为回文串。 动态规划五步曲&#xff1a; &#xff08;1&#xff09;dp[i][…

语音识别与Python编程实践

博主简介 博主是一名大二学生&#xff0c;主攻人工智能研究。感谢让我们在CSDN相遇&#xff0c;博主致力于在这里分享关于人工智能&#xff0c;c&#xff0c;Python&#xff0c;爬虫等方面知识的分享。 如果有需要的小伙伴可以关注博主&#xff0c;博主会继续更新的&#xff0c…

uni-app入门并使用学习

笔记课程 工具准备 下载HBuilderX 点击下载HBuilderX 下载微信开发者工具 点击下载微信开发者工具 使用参考uni-app官网 官网 新建项目运行 文件---新建----项目 运行到谷歌浏览器H5 运行------谷歌浏览器打开---打开成功&#xff08;第一次可能需要安装插件&#xff0…

React(三) ——新、旧生命周期

&#x1f9c1;个人主页&#xff1a;个人主页 ✌支持我 &#xff1a;点赞&#x1f44d;收藏&#x1f33c;关注&#x1f9e1; 文章目录⛳React生命周期&#x1f30b;初始化阶段&#x1f463;运行中阶段&#x1f3d3;销毁阶段&#x1f3eb;新生命周期的替代&#x1f69a;react中性…

MS9123是一款单芯片USB投屏器,内部集成了USB2 0控制器和数据收发模块、视频DAC和音视频处理模块,MS9123可以通过USB接口显示或者扩展PC、

MS9123是一款单芯片USB投屏器&#xff0c;内部集成了USB2.0控制器和数据收发模块、视频DAC和音视频处理模块&#xff0c;MS9123可以通过USB接口显示或者扩展PC、智能手机、平板电脑的显示信息到更大尺寸的显示设备上&#xff0c;支持CVBS、S-Video视频接口。 主要功能特征 C…

基本中型网络的仿真(RYU+Mininet的SDN架构)-以校园为例

目录 ​​​​​​​具体问题可以私聊博主 一、设计目标 1.1应用场景介绍 1.2应用场景设计要求 网络配置方式 网络技术要求 网络拓扑要求 互联互通 二、课程设计内容与原理 &#xff08;1&#xff09;预期网络拓扑结构和功能 &#xff08;1&#xff09;网络设备信息 …

aws ecr 使用golang实现的简单镜像转换工具

https://pkg.go.dev/github.com/docker/docker/client#section-readme 通过golang实现一个简单的镜像下载工具 总体步骤 启动一台海外区域的ec2实例安装docker和awscli配置凭证访问国内ecr仓库编写web服务实现镜像转换和自动推送 安装docker和awscli sudo yum remove awsc…

超市怎么做微信小程序_线上超市小程序开发可以实现什么功能呢

1。开发超市小程序有什么价值&#xff1f; 1、对于消费者来说&#xff1a;通过超市小程序能够更加直接的购买到想要的产品&#xff0c;消费者无需再到门店寻找商品可以直接通过超市小程序进行在线浏览&#xff1b;通过在线搜索的方式能够更加便捷的搜索到相应的商品&#xff0…