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

【TypeScript】基础:数据类型

文章目录

    • TypeScript
      • 一、简介
      • 二、类型声明
      • 三、数据类型
          • any
          • unknown
          • nerver
          • void
          • object
          • tuple
          • enum
          • Type
          • 一些特殊情况

TypeScript

是JavaScript的超集,代码量比JavaScript复杂、繁多;但是结构更清晰

一、简介

为什么需要TypeScript?

JavaScript的困扰

  1. 不清楚的数据类型
  2. 不会指明代码的逻辑漏洞
  3. 访问不存在的属性
  4. 低级的拼写错误

Typescript会进行静态类型检查:在代码运行前对代码进行检查标红;将代码错误前置

如何编译TypeScript?

要将.ts编译成.js文件;需要配置TypeScript的编译环境

  1. 全局安装TypeScript:npm i TypeScript -g

  2. 初始化:tsc --init

    生成一个编译控制文件tsconfig.json

  3. 监视ts文件:tsc --watch index.ts

    会生成一个对应的js文件,一有变化就会更新;并生成一个配置文件tsconfig.json

  4. 修改配置文件:取消注释 noEmitOnError:true

    只要ts文件语法正确的时候才会更新ts

二、类型声明

声明变量时,需要对其进行类型声明;使用:来进行类型声明

let a: string // a是字符串变量,只能赋值字符串(官方推荐小写)
let b: String // 字符串对应的包装对象
function sum(a: number, b: number): number {return a + b
} //sum函数的参数必须的number,返回值也必须是number

三、数据类型

any

任意类型,意味着放弃类型检查;即可以存任意类型的值,也可以赋值给任意类型的变量

unknown

未知类型,类型安全的any,但是不能将unknown数据类型赋给其他类型

若要将unknown赋值给其他类型,可以这么做:

let a: unknown
a = "hello"
let b: string
b = a as string
let str:unknown
str = "world"
str.toUppercase() //有警告
(str as string).toUppercase() //无警告
nerver

不是任何值;我们一般不用,不然声明的变量将无用。一般是TypeScript主动推断出来的,或者是特殊的函数(不需要任何返回值)

void

通常用于函数返回值的类型声明;这个类型是,函数返回值为空(undefined),且不依赖函数返回值进行任何操作。

function fn():undefined{ ... } 
let result1 = fn() // 编码者可以利用函数的返回值
function fn():void{ ... } 
let result2 = fn() // 编码者不可以利用函数的返回值
object

object(小写):非原始数据类型

Object(大写):可以调用到Object方法的类型;通俗讲,除了null和undefined都可以。

  1. 声明对象类型
  let person: { name: string, age?: number, [key: string]: any }//age?表示可选,// [key: string]: any 表示索引签名,任意数量的属性;key是any类型,value是string类型。
  1. 声明函数类型
  let sum: (a: number, b: number) => number //指明传入的参数类型number,返回类型也为numbersum = function (x, y) {return x + y}
  1. 声明数组类型
  let arr1:srtring[] //字符串数组let arr2:Array<string> //数字数组
tuple

元组类型 -> 特殊的数组类型。元素固定数量,可以是不同类型

!注意:元组不是关键字

let arr1 = [number,string] //两个元素,一个数字,一个字符串
let arr2 = [number,...[string]] //一个数字和任意个string
enum

枚举类型,定义一组命名常量;增强可读性,可维护性,程序员编写代码时不容易出错

  1. 数字枚举
  enum Direction{ Up, Down, Left, Right }function walk(data:Direction){ //使用例子if(data === Direction.Up){console.log("向【上】走");}else if(data === Direction.Down){console.log("向【下】走")}else if(data === Direction.Left){console.log("向【左】走")}else if(data === Direction.Right){console.log("向【右】走")}}
  1. 字符串枚举
  enum Direction{Up = "up",Down = "down",Left = "left",Right = "right"}
  1. 常量枚举

使用const关键字定义,在编译时内联,避免产生额外的代码

:那么何为内联?

在TypeScript编译时,将成员引用替换成实际值,不生成额外枚举对象,减少Javascript代码量,提高运行速度。

Type

为任意数据类型创建别名;一般开头用大写

  1. 创建别名

    type num = number // num是数字类型
    
  2. 联合类型(高级类型)

    type Status = number|string //Status是数字或字符串类型
    type Gender = "男"|"女" //Gender是字符"男"or"女"
    
  3. 交叉类型

    type Area = {height : number;width : number;speak():void;
    };
    
一些特殊情况

!当使用类型声明限制函数的返回值为空时,TypeScript并不会严格限制函数的返回值为空!

补充 数组方法map(),find()都是有返回值的操作;而forEach()是单纯遍历数组,没有返回值

type LogFunc = () => viod
const fn:LogFunc = () => {return 100 //允许返回非空值
}

为什么如此呢?就是为了兼容以下代码:

let src = [1, 2, 3]
const dst = [0]
src.forEach((e1) => dst.push(e1)) //forEach本身没有返回值,但是由于如果箭头函数只有一段代码可以不加{},如果严格限制返回值必须为空的话,这样写就会不合法,所以提前用限制函数为void的话,不是严格要求返回值必须是空

相关文章:

【TypeScript】基础:数据类型

文章目录 TypeScript一、简介二、类型声明三、数据类型anyunknownnervervoidobjecttupleenumType一些特殊情况 TypeScript 是JavaScript的超集&#xff0c;代码量比JavaScript复杂、繁多&#xff1b;但是结构更清晰 一、简介 为什么需要TypeScript&#xff1f; JavaScript的…...

Unity游戏(Assault空对地打击)开发(3) 摄像机的控制

详细步骤 打开My Assets或者Package Manager。 选择Unity Registry。 搜索Cinemachine&#xff0c;找到 Cinemachine包&#xff0c;点击 Install按钮进行安装。 关闭窗口&#xff0c;新建一个FreeLook Camera&#xff0c;如下。 接着新建一个对象Pos&#xff0c;拖到Player下面…...

【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(三)

目录 1 -> 生命周期 1.1 -> 应用生命周期 1.2 -> 页面生命周期 2 -> 资源限定与访问 2.1 -> 资源限定词 2.2 -> 资源限定词的命名要求 2.3 -> 限定词与设备状态的匹配规则 2.4 -> 引用JS模块内resources资源 3 -> 多语言支持 3.1 -> 定…...

小程序-基础加强-自定义组件

前言 这次讲自定义组件 1. 准备今天要用到的项目 2. 初步创建并使用自定义组件 这样就成功在home中引入了test组件 在json中引用了这个组件才能用这个组件 现在我们来实现全局引用组件 在app.json这样使用就可以了 3. 自定义组件的样式 发现页面里面的文本和组件里面的文…...

尝试ai生成figma设计

当听到用ai 自动生成figma设计时&#xff0c;不免好奇这个是如何实现的。在查阅了不少资料后&#xff0c;有了一些想法。参考了&#xff1a;在figma上使用脚本自动生成色谱 这篇文章提供的主要思路是&#xff1a;可以通过脚本的方式构建figma设计。如果我们使用ai 生成figma脚本…...

【周易哲学】生辰八字入门讲解(八)

&#x1f60a;你好&#xff0c;我是小航&#xff0c;一个正在变秃、变强的文艺倾年。 &#x1f514;本文讲解【周易哲学】生辰八字入门讲解&#xff0c;期待与你一同探索、学习、进步&#xff0c;一起卷起来叭&#xff01; 目录 一、六亲女命六亲星六亲宫位相互关系 男命六亲星…...

康德哲学与自组织思想的渊源:从《判断力批判》到系统论的桥梁

康德哲学与自组织思想的渊源&#xff1a;从《判断力批判》到系统论的桥梁 第一节&#xff1a;康德哲学中的自然目的论与自组织思想 核心内容&#xff1a; 康德哲学中的自然目的论和反思判断力概念&#xff0c;为现代系统论中的自组织思想提供了哲学基础&#xff0c;预见了复…...

解决whisper 本地运行时GPU 利用率不高的问题

我在windows 环境下本地运行whisper 模型&#xff0c;使用的是nivdia RTX4070 显卡&#xff0c;结果发现GPU 的利用率只有2% 。使用 import torch print(torch.cuda.is_available()) 返回TRUE。表示我的cuda 是可用的。 最后在github 的下列网页上找到了问题 极低的 GPU 利…...

【自开发工具介绍】SQLSERVER的ImpDp和ExpDp工具02

工具运行前的环境准备 1、登录用户管理员权限确认 工具使用的登录用户(-u后面的用户)&#xff0c;必须具有管理员的权限&#xff0c;因为需要读取系统表 例&#xff1a;Export.bat -s 10.48.111.12 -d db1 -u test -p test -schema dbo      2、Powershell的安全策略确认…...

java异常处理——try catch finally

单个异常处理 1.当try里的代码发生了catch里指定类型的异常之后&#xff0c;才会执行catch里的代码&#xff0c;程序正常执行到结尾 2.如果try里的代码发生了非catch指定类型的异常&#xff0c;则会强制停止程序&#xff0c;报错 3.finally修饰的代码一定会执行&#xff0c;除…...

【人工智能】使用Python和Hugging Face构建情感分析应用:从模型训练到Web部署

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 情感分析是自然语言处理(NLP)中的重要任务,它通过分析文本来判断情绪或观点的倾向性。近年来,预训练语言模型如BERT、GPT等在情感分析任…...

DeepSeek-R1:通过强化学习激励大型语言模型(LLMs)的推理能力

摘要 我们推出了第一代推理模型&#xff1a;DeepSeek-R1-Zero和DeepSeek-R1。DeepSeek-R1-Zero是一个未经监督微调&#xff08;SFT&#xff09;作为初步步骤&#xff0c;而是通过大规模强化学习&#xff08;RL&#xff09;训练的模型&#xff0c;展现出卓越的推理能力。通过强…...

算法随笔_37: 交替合并字符串

上一篇:算法随笔_36: 复写零-CSDN博客 题目描述如下: 给你两个字符串 word1 和 word2 。请你从 word1 开始&#xff0c;通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长&#xff0c;就将多出来的字母追加到合并后字符串的末尾。 返回 合并后的字符串 。 示例…...

低成本、高附加值,具有较强的可扩展性和流通便利性的行业

目录 虚拟资源类 1. 网课教程 2. 设计素材 3. 软件工具 服务类 1. 写作服务 2. 咨询顾问 3. 在线教育 4. 社交媒体管理 虚拟资源类 1. 网课教程 特点&#xff1a;高附加值&#xff0c;可复制性强&#xff0c;市场需求大。 执行流程&#xff1a; 选择领域&#xff1a…...

vue入门到实战 二

目录 2.1 计算属性computed 2.1.1什么是计算属性 2.1.2 只有getter方法的计算属性 2.1.3 定义有getter和setter方法的计算属性 2.1.4 计算属性和methods的对比 2.2 监听器属性watch 2.2.1 watch属性的用法 2.2.2 computed属性和watch属性的对比 2.1 计算属性computed…...

基于FPGA的BT1120编解码

BT1120与BT656 类似 BT1120与BT656同类属于一个视频协议,两者无论从组成、协议、同步码以及传输过程都是十分相似: 1、两者都是以F(场)、V(帧)、H(消隐)、D(有效)来区分数据的内容。 2、两者的传输数据都采用一样的方式,即内同步传输数据。 3、两者都传输的数据都是…...

二叉树-堆(补充)

二叉树-堆 1.二叉树的基本特性2.堆2.1.堆的基本概念2.2.堆的实现2.2.1.基本结构2.2.2.堆的初始化2.2.3.堆的销毁2.2.4.堆的插入2.2.5.取出堆顶的数据2.2.6.堆的删除2.2.7.堆的判空2.2.8.堆的数据个数2.2.9.交换2.2.10.打印堆数据2.2.11.堆的创建2.2.12.堆排序2.2.13.完整代码 3…...

基于springboot私房菜定制上门服务系统设计与实现(源码+数据库+文档)

私房菜定制上门服务系统目录 目录 基于springbootvue私房菜定制上门服务系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员功能实现 &#xff08;1&#xff09;菜品管理 &#xff08;2&#xff09;公告管理 &#xff08;3&#xff09; 厨师管理 2、用…...

2025开源DouyinLiveRecorder全平台直播间录制工具整合包,多直播同时录制、教学直播录制、教学视频推送、简单易用不占内存

一、DouyinLiveRecorder软件介绍&#xff08;文末提供下载&#xff09; 官方地址&#xff1a;GitHub - ihmily/DouyinLiveRecorder 本文信息来源于作者GitHub地址 一款简易的可循环值守的直播录制工具&#xff0c;基于FFmpeg实现多平台直播源录制&#xff0c;支持自定义配置录制…...

利用飞书机器人进行 - ArXiv自动化检索推荐

相关作者的Github仓库 ArXivToday-Lark 使用教程 Step1 新建机器人 根据飞书官方机器人使用手册&#xff0c;新建自定义机器人&#xff0c;并记录好webhook地址&#xff0c;后续将在配置文件中更新该地址。 可以先完成到后续步骤之前&#xff0c;后续的步骤与安全相关&…...

25.2.2学习内容

通过前序遍历和后序遍历求可能的二叉树的种数&#xff08;AI生成&#xff09;&#xff1a; #include<stdio.h> #include<string.h> #include<stdlib.h> #include<math.h>struct TreeNode {char val;struct TreeNode *left;struct TreeNode *right; };…...

python算法和数据结构刷题[5]:动态规划

动态规划&#xff08;Dynamic Programming, DP&#xff09;是一种算法思想&#xff0c;用于解决具有最优子结构的问题。它通过将大问题分解为小问题&#xff0c;并找到这些小问题的最优解&#xff0c;从而得到整个问题的最优解。动态规划与分治法相似&#xff0c;但区别在于动态…...

Compose笔记(二)--LaunchedEffect

这一节了解一下LaunchedEffect&#xff0c;在 Jetpack Compose 里&#xff0c;LaunchedEffect是一种用于启动协程的可组合函数&#xff0c;其主要用途是在协程里执行异步操作。LaunchedEffect函数能够接收一个或多个key参数。 1 key的含义: LaunchedEffect函数的key参数指的是…...

QT知识点复习

1.qt核心机制 对象树、信号和槽、事件机制 2.对象树的作用 优化了内存回收机制。子对象实例化的时候&#xff0c;被父对象放对象树上&#xff0c;父对象释放内存&#xff0c;子对象也释放内存 3.信号和槽的作用 实现多个组件之间的通讯 4.信号和槽的几种连接方式 1.UI界面提…...

【Rust自学】16.2. 使用消息传递来跨线程传递数据

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 16.2.1. 消息传递 有一种很流行而且能保证安全并发的技术&#xff08;或者叫机制&#xff09;叫做消息传递。在这种机制里&#xff0c;线…...

Python 合并 Excel 单元格

合并 Excel 单元格是 Excel 数据处理和表格设计中的一项常用操作。例如&#xff0c;在制作表格标题时&#xff0c;经常会将多个单元格合并&#xff0c;使标题能够跨列显示&#xff0c;更加醒目和美观。此外&#xff0c;当对数据进行分类时&#xff0c;为了使同一类别的数据在视…...

解锁豆瓣高清海报(二) 使用 OpenCV 拼接和压缩

解锁豆瓣高清海报(二): 使用 OpenCV 拼接和压缩 脚本地址: 项目地址: Gazer PixelWeaver.py pixel_squeezer_cv2.py 前瞻 继上一篇“解锁豆瓣高清海报(一) 深度爬虫与requests进阶之路”成功爬取豆瓣电影海报之后&#xff0c;本文将介绍如何使用 OpenCV 对这些海报进行智…...

利用腾讯云cloud studio云端免费部署deepseek-R1

1. cloud studio 1.1 cloud studio介绍 Cloud Studio&#xff08;云端 IDE&#xff09;是基于浏览器的集成式开发环境&#xff0c;为开发者提供了一个稳定的云端工作站。支持CPU与GPU的访问。用户在使用 Cloud Studio 时无需安装&#xff0c;随时随地打开浏览器即可使用。Clo…...

2025年Android开发趋势全景解读

文章目录 一、界面开发&#xff1a;从"手写代码"到"智能拼装"二、AI融合开发&#xff1a;无需炼丹的普惠智能三、车机开发&#xff1a;手机开发者的新蓝海&#xff08;车企需求拆解&#xff09;四、生存技能升级&#xff1a;开发者转型路线图五、避坑指南&…...

PySPARK带多组参数和标签的SparkSQL批量数据导出到S3的程序

设计一个基于多个带标签SparkSQL模板作为配置文件和多组参数的PySPARK代码程序&#xff0c;实现根据不同的输入参数自动批量地将数据导出为Parquet、CSV和Excel文件到S3上&#xff0c;标签和多个参数&#xff08;以“_”分割&#xff09;为组成导出数据文件名&#xff0c;文件已…...