【TS|第2期】 TypeScript 类型声明:基础与进阶

news2024/11/25 12:59:56

日期:2024年6月8日
作者:Commas
签名:(ง •_•)ง 积跬步以致千里,积小流以成江海……
注释:如果您觉得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方,还望各位大佬不吝赐教,谢谢^ - ^
1.01365 = 37.7834;0.99365 = 0.0255
1.02365 = 1377.4083;0.98365 = 0.0006


文章目录

  • 一、前言
  • 二、为什么要声明类型
  • 三、如何声明类型
  • 四、基础类型
  • 五、复合类型
  • 六、结语


在这里插入图片描述


一、前言


TypeScript 是一种强类型语言,是 JavaScript 的一个超集。它为 JavaScript 添加了类型系统,通过类型声明,我们能够为变量函数参数返回值定义类型约束,从而提高代码的可读性、维护性和健壮性。本文将探讨为什么需要类型声明,如何在 TypeScript 中进行类型声明,以及介绍基础类型和复合类型。

二、为什么要声明类型


JavaScript 中,变量的类型是动态的,这在一定程度上增加了代码的灵活性,但同时也带来了潜在的错误和维护难题。TypeScript 的类型声明机制可以提前发现类型错误,提高代码的可读性和可维护性。

  1. 类型安全:通过类型声明,可以确保变量、函数参数和返回值的类型正确性,避免运行时错误。
  2. 代码提示:在开发环境中,TypeScript 能够提供丰富的代码提示,帮助开发者快速了解可用的属性和方法。
  3. 重构支持:类型系统使得重构变得更加安全,因为编译器可以检测到类型不匹配的问题。
  4. 文档自动生成:类型声明可以作为代码的文档,帮助其他开发者理解代码结构和使用方法。

三、如何声明类型


TypeScript 中,类型声明非常简单。你可以通过以下方式为变量、函数参数和返回值声名类型:

// 变量类型声明
let myNumber: number = 10;

// 函数参数类型声明
function add(a: number, b: number): number {
  return a + b;
}

// 函数返回值类型声明
function getUserName(): string {
  return "Alice";
}

// 对象类型声明
const user: { name: string; age: number } = { name: "Alice", age: 25 };

// 数组类型声明
const numbers: number[] = [1, 2, 3];

// 元组类型声明
const userTuple: [string, number] = ["Alice", 25];

另外,也可以采用类型推断进行类型声明,TypeScript 编译器能够根据上下文自动推断出变量的类型,无需显式声明。

// 推断为 字符串 类型
let name = "Commas"

// 推断为 数值 类型
let age = 18

// 推断为 number[] 类型
let arr = [1, 2, 3]; 

四、基础类型


TypeScript 支持 JavaScript 中的所有原始类型,并且添加了一些额外的类型

类型说明
string表示字符串类型。
number表示数值类型,如整数、浮点数等。
boolean表示布尔类型,只有 truefalse 两个值。
void表示没有返回值的类型,通常用于函数返回值。
null表示一个空值,只有一个值 null
undefined表示未定义的值,只有一个值 undefined
any表示任意类型,用于当类型无法确定时,绕过类型检查。
never表示永远不会出现的值,通常用于表示一个始终抛出异常的函数。

五、复合类型


除了基础类型,TypeScript 还支持多种复合类型,用于构建更复杂的数据结构:

  • 数组类型T[]Array<T> 表示元素类型为 T 的数组。
let numbers: number[];
let strings: Array<string>;
  • 元组类型[T1, T2, ...] 表示固定长度和类型的数组。
let point: [number, number];
  • 枚举类型enum 用于定义一组命名的常量。
enum Color {
  Red,
  Green,
  Blue
}
  • 接口类型interface 用于定义对象的形状。
interface Person {
  name: string;
  age: number;
}

const person: Person = {
  name: 'Commas',
  age: 18
};
  • 类类型class 用于定义对象的蓝图。
class Student {
  name: string;
  age: number;

  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }
}
  • 泛型类型TU 等表示可以被多种类型使用的类型参数。
// 定义一个泛型函数,它接受一个类型T,并返回一个T类型的数组
function getArray<T>(items: T[]): T[] {
  return items;
}

// 使用number类型调用getArray函数
const numbers = getArray<number>([1, 2, 3, 4, 5]);
console.log(numbers); // 输出:[1, 2, 3, 4, 5]

// 使用string类型调用getArray函数
const strings = getArray<string>(["hello", "world"]);
console.log(strings); // 输出:["hello", "world"]

// 使用混合类型调用getArray函数
const mixed = getArray<number | string>([1, "two", 3, "four"]);
console.log(mixed); // 输出:[1, "two", 3, "four"]

六、结语


TypeScript 的类型声明可以帮助我们更好地管理代码提高代码质量开发效率。掌握基础类型和复合类型的使用方法,有助于我们更好地利用 TypeScript 的类型系统。


参考文章:
1、TypeScript 手册
2、TypeScript 入门教程


版权声明:本文为博主原创文章,如需转载,请给出:
原文链接:https://blog.csdn.net/qq_35844043/article/details/139538898

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

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

相关文章

贪心算法-加油站

一、题目描述 二、解题思路 1.运动过程分析 这里需要一个油箱剩余油量的变量resGas&#xff0c;初始化resGas0&#xff1b;还需要一个标记从什么位置当做初始位置的startIdx&#xff0c;初始化startIdx0。 我们从数组下标idx0处开始向后遍历&#xff0c;初始时startIdx0&#…

计算机专业本科论文起稿咋写

举例基于SpringBoot的Java基础的旅游管理系统 摘要 随着旅游业的快速发展&#xff0c;传统的旅游管理方式已经难以满足现代企业的需求。为了提高旅游企业的管理水平和服务质量&#xff0c;本文设计并实现了一个基于SpringBoot框架的旅游管理系统。本文首先介绍了旅游管理系统的…

聊一聊大数据需求的流程

大致的流程&#xff1a;需求对接、口径梳理、数据开发、任务发布、任务监控、任务保障 流程图 startuml skinparam packageStyle rectangleactor 需求方 participant 数据BP as 数据组 participant 离线数仓 participant 实时数仓需求方 -> 数据组: 提出需求 数据组 -> …

nomachine使用记录以及录包以及自动画深度学习网络图

录包命令&#xff1a; rosbag record 话题名字&#xff08;可以是原相机话题和执行程序的话题&#xff09;rosbag play 包名&#xff08;可以离线播放包的数据&#xff09; rqt_image_view 话题可视化yolov8自动生成网络结构图&#xff1a; pip install tensorflowtensorboard…

【优选算法】字符串

一、相关编程题 1.1 最长公共前缀 题目链接 14. 最长公共前缀 - 力扣&#xff08;LeetCode&#xff09; 题目描述 算法原理 编写代码 // 解法一&#xff1a;两两比较 class Solution { public:string longestCommonPrefix(vector<string>& strs) {int k strs[0…

《QT从基础到进阶·四十二》QT运行后项目图标,exe图标问题,VS加载.pro文件问题

1、QT图标有时候不能正常显示&#xff0c;不管是加到qrc还是用绝对路径&#xff0c;都无法正常显示&#xff0c;之前是可以的&#xff0c;具体原因目前还不太清楚&#xff0c;我在VS项目——vcpkg——use vcpkg把否改为是就可以了 2、出现无法定位程序输入点的报错&#xff0c…

Java Web学习笔记27——对话框、表单组件

常见组件对话框&#xff1a; Dialog对话框&#xff1a;在保留当前页面状态下&#xff0c;告知用户并承载相关操作。 dialogTableVisible: false 默认是不可见的。 在按钮属性中设置为true的意思&#xff0c;点击按钮的时候&#xff0c;才会true&#xff0c;对话框才会显示。 …

基于Springboot+vue实现的汽车服务管理系统

作者主页&#xff1a;Java码库 主营内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 技术选型 【后端】&#xff1a;Java 【框架】&#xff1a;spring…

【Python】解决Python报错:TypeError: ‘int‘ object is not callable

​​​​ 文章目录 引言1. 错误详解2. 常见的出错场景2.1 误用变量名2.2 混淆函数与结果 3. 解决方案3.1 明确变量类型3.2 使用函数调用() 4. 预防措施4.1 代码审查4.2 单元测试 结语 引言 在Python开发中&#xff0c;TypeError 是一种常见的错误类型&#xff0c;尤其是在尝试…

AI图书推荐:用ChatGPT来写非虚构类书籍

这本书《用ChatGPT来写非虚构类书籍 》&#xff08;ChatGPT For KDP_ A manual from an experienced self-publisher to nonfiction authors for writing the book you were born to write with ChatGPT prompts mastering&#xff09;是一本专为非虚构类书籍作者编写的指南&am…

初识C++ · 模拟实现list

目录 前言 1 push_back pop_back 2 迭代器类 2.1 ! 2.2 -- 2.3 * 3 Print_List 4 有关自定义类型 5 有关const迭代器 6 拷贝构造 赋值 析构 Insert erase 前言 有了string&#xff0c;vector的基础&#xff0c;我们模拟实现list还是比较容易的&#xff0c;这里同…

pc之间的相互通信详解

如图&#xff0c;实现两台pc之间的相互通信 1.pc1和pc2之间如何进行通讯。 2.pc有mac和ip&#xff0c;首先pc1需要向sw1发送广播&#xff0c;sw1查询mac地址表&#xff0c;向router发送广播&#xff0c;router不接受广播&#xff0c;router的每个接口都有ip和mac&#xff0c;…

windows下 Qt 操作xlsx 和 csv

需求&#xff1a; 工作中遇到一个需求&#xff0c;有两张表格&#xff0c;一个xlsx表&#xff0c;一个csv表格&#xff0c;格式如下&#xff1a; 以csv表格中船台标识为基础&#xff0c;读取xlsx中的数据&#xff0c;如果存在该MMSI则把船名写道csv中对应船名的后面&#xff0…

四十三、openlayers官网示例Freehand Drawing解析——在地图上自由绘制图形

想要在地图上绘制自由图形&#xff0c;只需要在new Draw的时候多加一个配置项就行。 function addInteraction() {const value typeSelect.value;if (value ! "None") {draw new Draw({source: source,type: typeSelect.value,freehand: true, //是否自由绘制});ma…

TensorRT 精度debug分析工具

tensorRT还提供了一套可用于engine生成过程中debug的工具&#xff0c;包括Polygraphy、ONNX GraphSurgeon和PyTorch-Quantization。这些小工具用处很大&#xff0c;值得花时间进一步研究。 Debug方法示例 polygraphy Polygraphy是TensorRT官方提供的一系列小工具合集&#x…

面试(02)————Java集合篇

目录 一、为什么数组索引是从0开始&#xff1f;如果从1开始不行吗&#xff1f; 二、ArrayList底层的实现原理是什么&#xff1f; ​编辑三、ArrayList list new ArrayList(10)中的list扩容几次&#xff1f; 四、如何实现数组与List之间的转换&#xff1f; 五、ArrayList…

【STM32】µC/OS-III多任务程序

【STM32】C/OS-III多任务程序 一、探究目的二、探究原理2.1 嵌入式操作系统2.1.1 RTOS2.1.2 前后台系统2.1.2 C/OS-III 三、探究过程&#xff08;实验一&#xff09;3.1 μC/OS-III环境配置3.1.1 CubeMX配置3.1.2 下载μC/OS-III源码3.1.3 KEIL环境配置3.1.4 KEIL代码更改3.1.5…

【SpringBoot】项目搭建基本步骤(整合 Mybatis)

搭建 SpringBoot 项目有两种方式&#xff1a;使用 IDEA、或者在 Spring 官网下载。 1. IDEA 创建 打开 IDEA 后&#xff0c;英文版请点击 File -> New -> Project -> Spring Initialer。 中文版请点击 文件 -> 新建 -> 项目 -> Spring Initialer。 在打开的…

编译遇到找不到pcap.so 问题

1.locate 定义pcap.so locate pcap.so 如果存在则打印所有路径 使用软连接将pcap.so 的实际位置连接到编译的lib 目录下 ln -s /usr/lib/x86_64-linux-gnu/libpcap.so /usr/lib/libpcap.so 编译 提示 说明程序中编译的目标程序需要的库与现有的不兼容&#xff0c;一般都是3…

易语言高仿植物大战僵尸

易语言高仿植物大战僵尸 效果图运行教程与部分问题解决部分源码源码领取方式下期更新预报 效果图 运行教程与部分问题解决 在第一次运行代码的时候会出现一下情况&#xff0c;让我们去下载精易模块[v10.3.5] 那怎么运行呢&#xff1f;放心我为你们准备了这个模块&#xff0c;…