【TS】TypeScript 原始数据类型深度解析


鑫宝Code

🌈个人主页: 鑫宝Code
🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础
💫个人格言: "如无必要,勿增实体"


文章目录

  • TypeScript 原始数据类型深度解析
    • 一、引言
    • 二、基础原始数据类型
      • 2.1 `boolean`
      • 2.2 `number`
      • 2.3 `string`
      • 2.4 `null`与`undefined`
      • 2.5 `void`
    • 三、特殊原始数据类型
      • 3.1 `never`
      • 3.2 `any`
    • 四、类型推论
    • 五、最佳实践
      • 5.1 显式类型注解
      • 5.2 避免滥用`any`和`unknown`
      • 5.3 使用`--strict`模式
    • 六、总结

TypeScript 原始数据类型深度解析

在这里插入图片描述
在深入学习TypeScript的高级特性和面向对象编程之前,掌握其基础——原始数据类型至关重要。原始数据类型是构建所有复杂数据结构的基石,它们直接关系到代码的性能、安全性及可读性。本文将系统性地探讨TypeScript中的原始数据类型,包括它们的定义、使用场景、特点以及最佳实践,为你的TypeScript之旅奠定坚实的基础。

一、引言

TypeScript作为JavaScript的超集,不仅继承了JavaScript的全部原始数据类型,还在此基础上新增了额外的类型以增强代码的健壮性和可维护性。理解这些类型及其用途,是写出高质量TypeScript代码的第一步。

二、基础原始数据类型

2.1 boolean

布尔类型是最简单的数据类型,只有两个可能的值:truefalse。它通常用于条件判断和逻辑运算。

let isDone: boolean = false;

2.2 number

number类型用于表示整数和浮点数,JavaScript中的Number类型是双精度64位浮点数。TypeScript并没有区分整数和浮点数,但可以通过类型断言或第三方库来实现更严格的数值类型控制。

let decimal: number = 6;
let hex: number = 0xf00d;
let binary: number = 0b1010;
let octal: number = 0o744;

2.3 string

字符串类型用于存储文本数据,可以用单引号、双引号或模板字符串表示。

let name: string = "Alice";
let greeting: string = `Hello, ${name}!`;

2.4 nullundefined

在TypeScript中,nullundefined是所有类型的子类型,意味着它们可以赋值给任何类型。然而,这往往导致类型不安全,因此推荐使用严格Null检查(--strictNullChecks),以避免意外的nullundefined

let u: undefined = undefined;
let n: null = null;

2.5 void

void类型表示没有任何返回值的函数。通常用于定义不返回值的函数,或者表示没有具体值的类型。

function printMessage(message: string): void {console.log(message);
}

三、特殊原始数据类型

3.1 never

never类型表示那些永不会达到终点的代码,例如,一个抛出异常或无限循环的函数。它没有值,且不能被其他类型兼容。

function throwError(message: string): never {throw new Error(message);
}

3.2 any

any类型是TypeScript中的“逃脱舱”,它可以代表任何类型。虽然在某些情况下有用,但过度使用会削弱TypeScript的类型安全特性,应尽量避免。

let notSure: any = 4;
notSure = "maybe a string instead";

四、类型推论

在这里插入图片描述

TypeScript具有类型推论机制,能够在没有明确类型注解的情况下推断变量的类型。这简化了代码,但开发者仍应适时使用类型注解以提高代码的可读性和维护性。

let inferredString = "TypeScript is intelligent"; // 类型推论为 'string'

五、最佳实践

5.1 显式类型注解

在这里插入图片描述

尽管TypeScript有强大的类型推论能力,但在关键位置使用显式类型注解可以提高代码的清晰度,尤其是在函数参数和返回值类型上。

5.2 避免滥用anyunknown

尽量减少使用any,除非是在处理遗留代码或第三方库时确实需要。对于不确定类型的值,推荐使用unknown,它比any更安全,要求显式的类型检查和转换。

5.3 使用--strict模式

开启--strict编译选项组,包括--strictNullChecks,可以大幅提升代码质量,强制执行更严格的类型检查规则。

六、总结

TypeScript的原始数据类型构成了其类型系统的基石。通过理解并熟练运用这些类型,开发者不仅能编写出更健壮、更易于维护的代码,还能充分利用现代IDE的智能提示和类型检查功能,显著提升开发效率。随着TypeScript社区的不断成熟和新特性的加入,掌握这些基础变得更加重要,它们是通往TypeScript高级特性和复杂应用开发的必经之路。希望本文能为你深入探索TypeScript的世界铺平道路。

End

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

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

相关文章

苍穹外卖--sky-take-out(四)10-12

苍穹外卖--sky-take-out(一) 苍穹外卖--sky-take-out(一)-CSDN博客​编辑https://blog.csdn.net/kussm_/article/details/138614737?spm1001.2014.3001.5501https://blog.csdn.net/kussm_/article/details/138614737?spm1001.2…

Unity动画系统(2)

6.1 动画系统基础2-3_哔哩哔哩_bilibili p316 模型添加Animator组件 动画控制器 AnimatorController AnimatorController 可以通过代码控制动画速度 建立动画间的联系 bool值的设定 trigger p318 trigger点击的时候触发,如喊叫,开枪及换子弹等&#x…

错误 [WinError 10013] 以一种访问权限不允许的方式做了一个访问套接字的尝试 python ping

报错提示:错误 [WinError 10013] 以一种访问权限不允许的方式做了一个访问套接字的尝试 用python做了一个批量ping脚本,在windows专业版上没问题,但是到了windows服务器就出现这个报错 解决方法:右键 管理员身份运行 这个脚本 …

sql拉链表

1、定义:维护历史状态以及最新数据的一种表 2、使用场景 1、有一些表的数据量很大,比如一张用户表,大约1亿条记录,50个字段,这种表 2.表中的部分字段会被update更新操作,如用户联系方式,产品的…

在 WebGPU 与 Vulkan 之间做出正确的选择(Making the Right Choice between WebGPU vs Vulkan)

在 WebGPU 与 Vulkan 之间做出正确的选择(Making the Right Choice between WebGPU vs Vulkan) WebGPU 和 Vulkan 之间的主要区别WebGPU 是什么?它适合谁使用?Vulkan 是什么?它适合谁使用?WebGPU 和 Vulkan…

修改CentOS7 yum源

修改CentOS默认yum源为阿里镜像源 备份系统自带yum源配置文件 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 下载ailiyun的yum源配置文件 CentOS7 yum源如下: wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun…

[OC]萝卜圈Python手动机器人脚本

这是给机器人设置的端口,对照用 代码 # #作者:溥哥’ ##机器人驱动主程序 #请在main中编写您自己的机器人驱动代码 import msvcrt def main():a"none"while True:key_input msvcrt.getch()akey_inputif abw:print(a)robot_drv.set_motors(1,40,2,40,3,…

uniapp学习笔记

uniapp官网地址:https://uniapp.dcloud.net.cn/ 学习源码:https://gitee.com/qingnian8/uniapp-ling_project.git 颜色网址:https://colordrop.io/ uniapp中如何获取导航中的路由信息? onLoad(e){console.log(e)console.log(e.w…

2.2.4 C#中显示控件BDPictureBox 的实现----ROI交互

2.2.4 C#中显示控件BDPictureBox 的实现----ROI交互 1 界面效果 在设定模式下&#xff0c;可以进行ROI 框的拖动&#xff0c;这里以Rect1举例说明 2 增加ROI类定义 /// <summary> /// ROI_single /// 用于描述图片感兴趣区域 /// type: 0:Rect1;1:Rect2;2:Circle ;3:…

工业路由器与家用路由器的区别

在现代网络环境中&#xff0c;路由器扮演着至关重要的角色。无论是在家庭网络还是在工业网络&#xff0c;选择合适的路由器都至关重要。本文将从多个角度&#xff0c;对工业路由器与家用路由器进行详细比较&#xff0c;帮助您更好地理解二者的区别。 1、安全性 工业路由器&…

大模型应用开发实战基础

大模型应用开发实战基础 1. 背景 大模型如日中天&#xff0c;各行各业都受它影响&#xff0c;但是作为程序员&#xff0c;除了让它翻译代码不知道用它干什么&#xff0c;就像是拿着锤子的木匠&#xff0c;找不到钉子在哪。一边听着别人说2024是AI元年&#xff0c;一边又不知所…

中控室监控台在水处理行业的作用

随着工业化和城市化的快速推进&#xff0c;水处理行业的重要性日益凸显。作为确保水质安全、提高水资源利用效率的关键环节&#xff0c;水处理厂需要高效、稳定地运行。在这个过程中&#xff0c;中控室监控台发挥着不可或缺的作用。本文将从以下几个方面&#xff0c;详细阐述中…

fyne的MultiLineEntry设置大小

MultiLineEntry设置大小 在另一篇文章讲过&#xff0c;放入border布局中&#xff0c;可以最大化MultiLineEntry。 这里再介绍另一种方法:SetMinRowsVisible() func (e *Entry) SetMinRowsVisible(count int) {e.multiLineRows counte.Refresh() }SetMinRowsVisible强制mult…

九浅一深Jemalloc5.3.0 -- ④浅*配置

目前市面上有不少分析Jemalloc老版本的博文&#xff0c;但最新版本5.3.0却少之又少。而且5.3.0的架构与5之前的版本有较大不同&#xff0c;本着“与时俱进”、“由浅入深”的宗旨&#xff0c;我将逐步分析最新release版本Jemalloc5.3.0的实现。 另外&#xff0c;单讲实现代码是…

ShareSDK iOS端如何实现小红书分享

下载SDK 请登陆官网 &#xff0c;找到SDK下载&#xff0c;勾选需要的平台下载 导入SDK &#xff08;1&#xff09;离线导入将上述下载到的SDK&#xff0c;直接将整个SDK资源文件拖进项目里&#xff0c;如下图&#xff1a; 并且勾选以下3个选项 在点击Finish&#xff0c;…

JavaSE简易版扫雷小游戏

描述&#xff1a;用户输入二维雷区的高和宽&#xff0c;输入确定地雷数&#xff0c;随机在地雷区生成地雷。用户输入横竖坐标进行挖雷&#xff0c;挖到地雷游戏以失败结束&#xff0c;并让用户选择是否再次游戏&#xff1b;没挖到雷&#xff0c;显示该区域8个方向地雷数。如果8…

uniapp + vue3 + Script Setup 写法变动 (持续更新)

一、uniapp 应用生命周期&#xff1a; https://uniapp.dcloud.net.cn/tutorial/vue3-composition-api.html 注意&#xff1a; 应用生命周期仅可在App.vue中监听&#xff0c;在其它页面监听无效。 二 、uniapp页面生命周期&#xff1a; https://uniapp.dcloud.net.cn/tutori…

Golang | Leetcode Golang题解之第212题单词搜索II

题目&#xff1a; 题解&#xff1a; type Trie struct {children map[byte]*Trieword string }func (t *Trie) Insert(word string) {node : tfor i : range word {ch : word[i]if node.children[ch] nil {node.children[ch] &Trie{children: map[byte]*Trie{}}}nod…

Zynq系列FPGA实现SDI视频编解码,基于GTX高速接口,提供5套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐本博已有的 SDI 编解码方案本方案在Xilinx--Kintex系列FPGA上的应用 3、详细设计方案设计原理框图SDI 输入设备Gv8601a 均衡器GTX 解串与串化SMPTE SD/HD/3G SDI IP核BT1120转RGB图像缓存视频读取控制HDMI输出RGB转BT1120Gv8500 驱…

vuepress使用简介及个人博客搭建

目录 一、介绍二、环境准备三、安装运行vuepress四、目录结构五、配置文件六、导航栏配置七、导航栏logo八、浏览器图标九、侧边栏配置十、添加 Git 仓库和编辑链接十一、部署到GitHub十二、搭建成功 一、介绍 VuePress 是 Vuejs 官方提供的一个是Vue驱动的静态网站生成器&…