当前位置: 首页 > 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 的类型系统的一些基础知识。在接下来的学习中,我们将深入了解这些概念,并学习更多高级特性。

http://www.lryc.cn/news/93733.html

相关文章:

  • 【SpringCloud入门】-- Ribbon入门
  • (二)Liunx下ElasticSearch快速搭建
  • 神经网络编程基础
  • 2023年北京/上海/深圳DAMA-CDGA/CDGP数据治理工程师认证报名
  • Python之枚举类Enum定义错误码
  • GIS大数据处理框架sedona(塞多纳)编程入门指导
  • C++基础(7)——类和对象(5)
  • 【Express.js】sql-knex 增删改查
  • 构建基于前后端分离的医学影像学学习平台:Java技术实现与深度解析
  • 从零开始学习R语言编程:完全指南
  • PulsarMQ系列入门篇
  • 编程的实践理论 第九章 交互
  • BSN全球技术创新发展峰会在武汉举办,“延安链”正式发布
  • 8.4 IP地址与端口号
  • day56_springmvc
  • SQL Server Management Studio (SSMS)下载,安装以及连接数据库配置
  • go 错误 异常
  • 智慧加油站卸油作业行为分析算法 opencv
  • LiangGaRy-学习笔记-Day22
  • 数据库横表和竖表有什么区别
  • 哈希表--day1--基本理论介绍
  • 基于OpenMV的疲劳驾驶检测系统的设计
  • chatgpt赋能python:使用Python来寻找两个列表不同元素的方法
  • 简单学生管理系统
  • 图像金字塔
  • Springboot整合Camunda工作流引擎实现审批流程实例
  • PHP设计模式21-工厂模式的讲解及应用
  • 【玩转Docker小鲸鱼叭】理解Docker的核心概念
  • Eureka 心跳和服务续约源码探秘——图解、源码级解析
  • 代码随想录二刷 530 二叉搜索树的最小绝对差 98. 验证二叉搜索树 700. 二叉搜索树中的搜索