当前位置: 首页 > news >正文

TypeScript 第一章

欢迎来到 TypeScript 学习!本章将为您介绍 TypeScript 的基础知识。
TypeScript 是 JavaScript 的一个超集,它提供了静态类型检查、类、接口等特性,使得编写大型应用程序变得更加容易和可维护。TypeScript 编写的代码可以被编译成 JavaScript,可以在任何支持 JavaScript 的环境中运行。

在本章中,我们将深入了解 TypeScript 的基础知识,包括类型注解、类和接口、函数、基本类型、高级类型和类型推断等。

类型注解

TypeScript 可以指定变量、函数、类等的类型,以便在编译时进行类型检查。

变量类型注解

以下是一个声明字符串类型的变量的示例:

let name: string = "TypeScript";

在这个示例中,我们使用 : 操作符指定了变量 name 的类型为 string。

函数类型注解

以下是一个接受两个数字并返回它们之和的函数的示例:

function add(x: number, y: number): number {return x + y;
}

在这个示例中,我们使用 : 操作符指定了函数的参数类型和返回值类型。

类型注解的好处

使用类型注解可以帮助我们更早地发现代码中的错误,提高代码的可读性和可维护性。例如,以下是一个未使用类型注解的示例:

function add(x, y) {return x + y;
}let result = add(1, '2');
console.log(result);

在这个示例中,我们没有使用类型注解指定 add 函数的参数类型和返回值类型。当我们调用 add(1, ‘2’) 时,代码不会报错,但是会返回一个错误的结果。如果我们使用类型注解,就可以更早地发现这个错误:

function add(x: number, y: number): number {return x + y;
}let result = add(1, '2'); // Error: Argument of type '"2"' is not assignable to parameter of type 'number'.
console.log(result);

在这个示例中,TypeScript 报告了一个类型错误,提示我们传递给 add 函数的第二个参数类型不匹配。

类和接口

TypeScript 支持类和接口,它们可以帮助我们组织代码和定义对象的结构。

以下是一个简单的类声明:

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.`);}
}

在这个示例中,我们声明了一个 Person 类,它有一个 name 属性和一个 age 属性,以及一个 sayHello 方法。在构造函数中,我们使用 this 关键字来引用类的实例。

接口

以下是一个接口声明:

interface Person {name: string;age: number;
}function greet(person: Person) {console.log(`Hello, ${person.name}!`);
}

在这个示例中,我们声明了一个 Person 接口,它有一个 name 属性和一个 age 属性。在 greet 函数中,我们使用 Person 接口来指定参数 person 的类型。

类和接口的好处

使用类和接口可以帮助我们更好地组织代码和定义对象的结构,提高代码的可读性和可维护性。例如,以下是一个使用类和接口的示例:

interface Animal {name: string;eat(food: string): void;
}class Cat implements Animal {name: string;constructor(name: string) {this.name = name;}eat(food: string) {console.log(`${this.name} is eating ${food}`);}
}let cat = new Cat('Tom');
cat.eat('fish');

在这个示例中,我们声明了一个 Animal 接口,它有一个 name 属性和一个 eat 方法。然后,我们声明了一个 Cat 类,它实现了 Animal 接口,并定义了自己的 name 属性和 eat 方法。最后,我们创建了一个 Cat 类的实例 cat,并调用了它的 eat 方法。

函数

TypeScript 支持函数,可以指定函数的参数类型和返回值类型。

函数参数类型

以下是一个接受两个数字并返回它们之和的函数:

function add(x: number, y: number): number {return x + y;
}

在这个示例中,我们使用 : 操作符指定了函数的参数类型和返回值类型。

可选参数和默认参数

以下是一个接受两个数字并返回它们之和的函数,其中第二个参数为可选参数,第三个参数为默认参数:

function add(x: number, y?: number, z = 0): number {return x + (y ?? 0) + z;
}

在这个示例中,我们使用 ? 操作符指定第二个参数 y 为可选参数,使用 = 操作符指定第三个参数 z 的默认值为 0。

剩余参数

以下是一个接受任意数量数字并返回它们之和的函数,其中使用了剩余参数:

function sum(...numbers: number[]): number {return numbers.reduce((total, num) => total + num, 0);
}

在这个示例中,我们使用 … 操作符指定剩余参数 numbers,它可以接受任意数量的数字参数。

基本类型

TypeScript 支持 JavaScript 的基本类型,包括布尔值、数字、字符串、数组、元组、枚举和任意值等。

布尔值

以下是一个布尔类型的变量声明:

let isDone: boolean = false;

在这个示例中,我们使用 boolean 类型指定变量 isDone 的类型为布尔值。

数字

以下是一个数字类型的变量声明:

let count: number = 10;

在这个示例中,我们使用 number 类型指定变量 count 的类型为数字。

字符串

以下是一个字符串类型的变量声明:

let message: string = "Hello, TypeScript!";

在这个示例中,我们使用 string 类型指定变量 message 的类型为字符串。

数组

以下是一个数字类型的数组声明:

let numbers: number[] = [1, 2, 3, 4, 5];

在这个示例中,我们使用 number[] 类型指定变量 numbers 的类型为数字类型的数组。

元组

以下是一个元组类型的变量声明:

let tuple: [string, number] = ["TypeScript", 2021];

在这个示例中,我们使用 [string, number] 类型指定变量 tuple 的类型为包含一个字符串类型和一个数字类型的元组。

枚举

以下是一个枚举类型的声明:

enum Color {Red,Green,Blue,
}let color: Color = Color.Red;

在这个示例中,我们声明了一个 Color 枚举类型,并将变量 color 的值设置为 Color.Red。

任意值

以下是一个任意值类型的变量声明:

let value: any = "hello";
value = 10;

在这个示例中,我们使用 any 类型指定变量 value 的类型为任意值,它可以被赋值为任何类型的值。

以上是 TypeScript 的类型系统的一些基础知识。在接下来的学习中,我们将深入了解这些概念,并学习更多高级特性。

相关文章:

TypeScript 第一章

欢迎来到 TypeScript 学习!本章将为您介绍 TypeScript 的基础知识。 TypeScript 是 JavaScript 的一个超集,它提供了静态类型检查、类、接口等特性,使得编写大型应用程序变得更加容易和可维护。TypeScript 编写的代码可以被编译成 JavaScript…...

【SpringCloud入门】-- Ribbon入门

1.什么是Ribbon? Ribbon就是netflix公司的一个开源项目,主要功能是提供客户端负载均衡算法和服务调用。Ribbon客户端组件提供了完善的配置项,如连接超时,重试等等。Ribbon作为服务消费者的负载均衡器,有两种使用方式&…...

(二)Liunx下ElasticSearch快速搭建

1.下载安装 1)环境准备: 操作系统:centos7 es版本:8.8.1 jdk:17 es与jdk等兼容支持查看 2)下载安装包上传到服务器,官网地址 https://www.elastic.co/cn/downloads/elasticsearch 3)解压文件…...

神经网络编程基础

目录 1、二分类(Binary Classification) 2、逻辑回归(Logistic Regression) 3、逻辑回归的代价函数(Logistic Regression Cost Function) 4、梯度下降法(Gradient Descent) 5、使用计算图求导数 6、逻辑回归中的梯度下降&…...

2023年北京/上海/深圳DAMA-CDGA/CDGP数据治理工程师认证报名

DAMA认证为数据管理专业人士提供职业目标晋升规划,彰显了职业发展里程碑及发展阶梯定义,帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力,促进开展工作实践应用及实际问题解决,形成企业所需的新数字经济下的核心职业…...

Python之枚举类Enum定义错误码

在 ​​web​​​ 项目中,我们经常使用自定义状态码来告知请求方请求结果以及请求状态;在 ​​Python​​ 中该如何设计自定义的状态码信息呢? 1、普通类字典设计状态码 class RETCODE:OK "0"ERROR …...

GIS大数据处理框架sedona(塞多纳)编程入门指导

GIS大数据处理框架sedona(塞多纳)编程入门指导 简介 Apache Sedona™是一个用于处理大规模空间数据的集群计算系统。Sedona扩展了现有的集群计算系统,如Apache Spark和Apache Flink,使用一组开箱即用的分布式空间数据集和空间SQL,可以有效地…...

C++基础(7)——类和对象(5)

前言 本文主要介绍C中的继承 4.6.1:继承和继承方式(公有、保护、私有) 4.6.2:继承中的对象模型,sizeof()求子类对象大小 4.6.3:子类继承父类后,两者构造和析构顺序 父类先构造、子类先析构 如…...

【Express.js】sql-knex 增删改查

Sql增删改查 本节使用knex作为sql框架,以sqlite数据库为例 准备工作 knex是一个运行在各自数据库Driver上的框架,因此需要安装相应的js版数据库Driver,如: PostgreSQL -> pg, mysql/mariadb -> mysql, sqlite -> sqlite3… 安装…...

构建基于前后端分离的医学影像学学习平台:Java技术实现与深度解析

在医学领域,影像学学习平台是一种重要的工具,用于帮助医学学生和专业人士学习和研究医学影像。本文将介绍如何使用Java构建一个基于前后端分离的医学影像学学习平台,通过结合前沿的Web开发技术和医学影像处理算法,为用户提供强大且高效的学习工具。 技术架构设计: 在构…...

从零开始学习R语言编程:完全指南

一、引言 R语言是一种流行的数据分析语言,广泛应用于学术界、商业界和社会科学研究等领域。与其它数据分析软件相比,R语言的优点包括免费开源、高效可靠、具有强大的数据分析和可视化能力等。R语言的编程基础包括了各种控制结构和函数,可以方…...

PulsarMQ系列入门篇

文章目录 介绍:部署安装讲解:安装单机版本测试(Linux下): 介绍: PulsarMQ 现托管于apache Apache 软件基金会顶级项目,2016年由雅虎公司开源的分布式多租户消息中间件 ,是下一代云原生分布式消息…...

编程的实践理论 第九章 交互

第九章 交互 根据状态的初始值和终止值,我们已经描述了计算。一个状态变量的声明如下: var x: T S ∃x, x′: T S 它说的是一个状态变量有两个数学变量,一个是初始值,一个是终止值。在这个 声明的作用域内,x和x…...

BSN全球技术创新发展峰会在武汉举办,“延安链”正式发布

原标题:《第二届BSN全球技术创新发展峰会在武汉成功举行》 6月9日,由湖北省人民政府指导,湖北省发展改革委、国家信息中心联合主办,中国移动、中国电信、中国联通、武汉市江汉区人民政府、区块链服务网络(BSN&#xf…...

8.4 IP地址与端口号

目录 IP地址 IP地址及编址方式 IP 地址及其表示方法 点分十进制记法举例 IP 地址采用 2 级结构 分类的 IP 地址 分类的 IP 地址 多归属主机 各类 IP 地址的指派范围 ​编辑 一般不使用的特殊的 IP 地址 ​编辑 分类的 IP 地址的优点和缺点 划分子网 无分类编址 CIDR 无…...

day56_springmvc

今日内容 零、 复习昨日 零、 复习昨日 一、JSON处理【重点】 springmvc支持json数据交互,但是自己本身没有对应jar,使用的是第三方Jackson,只需要导入对应依赖,springmvc即可使用 如果需要换用到FastJson 导入依赖配置文件中指定json转换的类型为FastJson本次课程没有替换,用的…...

SQL Server Management Studio (SSMS)下载,安装以及连接数据库配置

目录 (一)前言 (二)下载与安装 1. 下载 (1)下载地址 (2)SSMS对操作系统的要求 2. 安装 (1)存放下载好的安装包 (2) 双击进入安…...

go 错误 异常

自定义错误 Go语言中 错误使用内建的 error 类型表示, error类型是一个接口类型:定义如下: error 有一个 Error() 的方法‘所有实现该接口的类型 都可以当做一个错误的类型;Error()方法输入具体错误描述,在打印错误时…...

智慧加油站卸油作业行为分析算法 opencv

智慧加油站卸油作业行为分析系统通过opencvpython网络模型技术,智慧加油站卸油作业行为分析算法实现对卸油作业过程的实时监测。当现场出现卸油作业时人员离岗,打电话人员抽烟等违规行为,灭火器未正确摆放,明火和烟雾等异常状态&a…...

LiangGaRy-学习笔记-Day22

1、shell工具-tput 这个是tput bash工具 具体的操作如下: tput clear:清屏tput cup Y X 第Y行,第X列的位置 tput bold:字体加粗tput sgr0 : 重置命令tput setaf n n:代表数字0-7 0黑色1红色2绿色3黄色4蓝…...

数据库横表和竖表有什么区别

横表和竖表是描述数据库表结构的两种形式,它们之间的主要区别在于数据的组织方式和用途。 横表(宽表): 横表是一种常见的表结构,其特点是每一行数据包含所有相关属性,字段通常作为列出现。横表中的每行代表…...

哈希表--day1--基本理论介绍

文章目录 哈希表哈希函数哈希碰撞拉链法线性探测法 常见的三种哈希函数数组setmap 总结 哈希表 Hash table是根据关键码的值来直接进行访问的数据结构。 其实直白来讲其实数组就是一张哈希表,不过其索引是十分简单的,我们通过0来访问num[0]&#xff0c…...

基于OpenMV的疲劳驾驶检测系统的设计

一、前言 借助平台将毕业设计记录下来,方便以后查看以及与各位大佬朋友们交流学习。如有问题可以私信哦。 本文主要从两个方面介绍毕业设计:硬件,软件(算法)。以及对最后的实验结果进行分析。感兴趣的朋友们可以评论区…...

chatgpt赋能python:使用Python来寻找两个列表不同元素的方法

使用Python来寻找两个列表不同元素的方法 在编写Python程序时,我们经常需要比较两个列表的元素,找出它们之间的不同之处。在搜索引擎优化(SEO)方面,这种比较对于找出两个网站内容的差异也非常有用。在这篇文章中&…...

简单学生管理系统

简单学生管理系统(Java)_封奚泽优的博客-CSDN博客https://blog.csdn.net/weixin_64066303/article/details/130667107?spm1001.2014.3001.5501 转载请注明出处,尊重作者劳动成果。 目录 前期准备: 数据库的连接: 用户账号类:…...

图像金字塔

​ 图像金字塔是由一幅图像的多个不同分辨率的子图构成的图像集合。是通过一个图像不断的降低采样率产生的,最小的图像可能仅仅有一个像素点。下图是一个图像金子塔的示例。从图中可以看到,图像金字塔是一系列以金字塔形状排列的、自底向上分辨率逐渐降低…...

Springboot整合Camunda工作流引擎实现审批流程实例

环境&#xff1a;Spingboot2.6.14 camunda-spring-boot-starter7.18.0 环境配置 依赖配置 <camunda.version>7.18.0</camunda.version> <dependency><groupId>org.camunda.bpm.springboot</groupId><artifactId>camunda-bpm-spring-boo…...

PHP设计模式21-工厂模式的讲解及应用

文章目录 前言基础知识简单工厂模式工厂方法模式抽象工厂模式 详解工厂模式普通的实现更加优雅的实现 总结 前言 本文已收录于PHP全栈系列专栏&#xff1a;PHP快速入门与实战 学会好设计模式&#xff0c;能够对我们的技术水平得到非常大的提升。同时也会让我们的代码写的非常…...

【玩转Docker小鲸鱼叭】理解Docker的核心概念

Docker核心概念 Docker有三大核心概念&#xff1a;镜像&#xff08;Image&#xff09;、容器&#xff08;Container&#xff09;、仓库&#xff08;Repository&#xff09; 1、镜像&#xff08;Image&#xff09; Docker镜像 是我们创建和运行Docker容器的基础&#xff0c;它…...

Eureka 心跳和服务续约源码探秘——图解、源码级解析

🍊 Java学习:社区快速通道 🍊 深入浅出RocketMQ设计思想:深入浅出RocketMQ设计思想 🍊 绝对不一样的职场干货:大厂最佳实践经验指南 📆 最近更新:2023年5月25日 🍊 点赞 👍 收藏 ⭐留言 📝 都是我最大的动力! 文章目录 分布式系统的心跳机制心跳机制的实…...

郑州专业做淘宝直播网站/广州灰色优化网络公司

用rpm方式装的mysql&#xff0c;配置了下&#xff0c;mysqld_multi 启动什么都没问题。但是编译安装的mysql5.5.20,启动mysqld_multi 报错 。datadir 什么都是正确创建了的&#xff0c;但就是找不到。./mysqld_multi --defaults-file/etc/my.cnf start 3307 --no-log --user…...

wordpress 空间商/app联盟推广平台

CRM客户关系管理系统源码 crm小程序源码 基于springbootvue MySQL数据库开发的客户关系管理系统。 客户全流程高效管理&#xff0c;客户资料管理&#xff0c;客户跟踪管理&#xff0c;订单、合同管理&#xff0c;回款及交付管理等功能。 功能介绍 1、系统管理&#xff1a;员工…...

常州网站建设基本流程/网页设计制作

《Linux设备驱动程序》ioctl详解除了读取和写入设备之外&#xff0c;大部分驱动程序还需要通过设备驱动程序实行各种类型的硬件控制。简单的数据传输之外&#xff0c;大部分设备还可以执行其他一些操作&#xff0c;比如&#xff0c;用户空间经常会请求设备锁门&#xff0c;弹出…...

网站开发合同知识产权/深圳网站seo

charles 校验 验证工具&#xff0f;validate 验证工具Charles可以通过发送到W3C HTML验证器&#xff0c;W3C CSS验证器和W3C Feed验证器来验证记录的响应。 验证报告在Charles中显示&#xff0c;并显示出与响应源中相应行的警告或错误(双击错误消息中的行号可以切换到源视图)。…...

如何做php网站建设/桂平seo关键词优化

http://www.neoease.com/nginx-virtual-host/...

wordpress显示用户自定义/南宁网站推广公司

要想从命令行启动mysqld服务器&#xff0c;你应当启动控制台窗口(或“DOS window”)并输入命令&#xff1a;C&#xff1a;/> C:/Program Files/MySQL/MySQL Server 5.0/bin/mysqld根据系统中MySQL安装位置的不同&#xff0c;前面的例子中使用的路径也不同。在非NT版本的Wind…...