【TypeScript】基础:数据类型
文章目录
- TypeScript
- 一、简介
- 二、类型声明
- 三、数据类型
- any
- unknown
- nerver
- void
- object
- tuple
- enum
- Type
- 一些特殊情况
TypeScript
是JavaScript的超集,代码量比JavaScript复杂、繁多;但是结构更清晰
一、简介
为什么需要TypeScript?
JavaScript的困扰
- 不清楚的数据类型
- 不会指明代码的逻辑漏洞
- 访问不存在的属性
- 低级的拼写错误
Typescript会进行静态类型检查:在代码运行前对代码进行检查标红;将代码错误前置
如何编译TypeScript?
要将.ts编译成.js文件;需要配置TypeScript的编译环境
-
全局安装TypeScript:
npm i TypeScript -g -
初始化:
tsc --init生成一个编译控制文件tsconfig.json
-
监视ts文件:
tsc --watch index.ts会生成一个对应的js文件,一有变化就会更新;并生成一个配置文件tsconfig.json
-
修改配置文件:取消注释
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都可以。
- 声明对象类型
let person: { name: string, age?: number, [key: string]: any }//age?表示可选,// [key: string]: any 表示索引签名,任意数量的属性;key是any类型,value是string类型。
- 声明函数类型
let sum: (a: number, b: number) => number //指明传入的参数类型number,返回类型也为numbersum = function (x, y) {return x + y}
- 声明数组类型
let arr1:srtring[] //字符串数组let arr2:Array<string> //数字数组
tuple
元组类型 -> 特殊的数组类型。元素固定数量,可以是不同类型
!注意:元组不是关键字
let arr1 = [number,string] //两个元素,一个数字,一个字符串
let arr2 = [number,...[string]] //一个数字和任意个string
enum
枚举类型,定义一组命名常量;增强可读性,可维护性,程序员编写代码时不容易出错
- 数字枚举
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("向【右】走")}}
- 字符串枚举
enum Direction{Up = "up",Down = "down",Left = "left",Right = "right"}
- 常量枚举
使用const关键字定义,在编译时内联,避免产生额外的代码
:那么何为内联?
在TypeScript编译时,将成员引用替换成实际值,不生成额外枚举对象,减少Javascript代码量,提高运行速度。
Type
为任意数据类型创建别名;一般开头用大写
-
创建别名
type num = number // num是数字类型 -
联合类型(高级类型)
type Status = number|string //Status是数字或字符串类型 type Gender = "男"|"女" //Gender是字符"男"or"女" -
交叉类型
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的超集,代码量比JavaScript复杂、繁多;但是结构更清晰 一、简介 为什么需要TypeScript? JavaScript的…...
Notepad++消除生成bak文件
设置(T) ⇒ 首选项... ⇒ 备份 ⇒ 勾选 "禁用" 勾选禁用 就不会再生成bak文件了 notepad怎么修改字符集编码格式为gbk 如图所示...
Android NDK
Android NDK环境 D:\Android SDK\ndk\25.2.9519653 使用clang而不用gcc D:\Android SDK\ndk\25.1.8937393\toolchains\llvm\prebuilt\windows-x86_64\bin\clang --version 查看是否安装成功clang ptrace 在 C 语言中,ptrace 已经被 Linux 内核实现࿰…...
内部知识库助力组织智力激发与信息共享实现业绩增长
内容概要 内部知识库是企业知识管理的核心组件,具有不可估量的重要性。通过构建有效的知识库,组织能够将孤立的知识和信息整合成为一个系统性的体,极大提高员工访问和利用这些信息的能力。这不仅简化了决策过程,还通过减少重复劳…...
通过F12收集的信息
按 F12 键打开浏览器的开发者工具(DevTools)可以获取部分操作系统和中间件信息,但能力有限。以下是具体说明: 一、通过 F12 收集的信息 1. 客户端操作系统信息 - Console 控制台 通过 JavaScript 直接获取客户端操作系统信息&am…...
用Python替代OpenMV IDE显示openmv USB 图像
原理是利用openmv的usb模仿串口,然后用Python代码打开串口接收 能替代openmv ide 跑48帧图像 Python端需要的依赖: 需要的是: from ultralytics import YOLO import cv2 import numpy as np from serial import Serial import time from co…...
c语言:编译和链接(详解)
前言 要将编译和链接,就不得不提及编译器是如何运作的,虽然这部分知识是针对于要创造编译器和创作语言的人所需要清楚的,但作为c语言的学习者也需要了解一下,修炼内功,尤其是对于想学习c的人而言。 编译器的运作过程…...
数据结构【单链表操作大全详解】【c语言版】(只有输入输出为了方便用的c++)
单链表操作的C/C实现详解 在数据结构中,单链表是一种非常基础且重要的数据结构。它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。今天我们就来深入探讨用C/C实现的单链表及其各种操作。 一、单链表的定义 const int N 1e5; //单链表 t…...
leetcode27.删除有序数组中的重复项
目录 问题描述判题标准示例提示 具体思路思路一思路二 代码实现 问题描述 给你一个非严格递增排列的数组nums,请你原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。元素的相对顺序应该保持一致 。然后返回nums中唯一元…...
[c语言日寄]越界访问:意外的死循环
【作者主页】siy2333 【专栏介绍】⌈c语言日寄⌋:这是一个专注于C语言刷题的专栏,精选题目,搭配详细题解、拓展算法。从基础语法到复杂算法,题目涉及的知识点全面覆盖,助力你系统提升。无论你是初学者,还是…...
【c++11】包装器
🔥个人主页:Quitecoder 🔥专栏:c笔记仓 包装器(Wrapper) 是一个常见的编程设计模式,通常用于封装或“包装”某个现有的对象、函数、数据结构或者操作,以提供额外的功能或简化接口。…...
信息学奥赛一本通 1422:【例题1】活动安排
【题目链接】 ybt 1422:【例题1】活动安排 【题目考点】 1. 贪心 【解题思路】 该题属于区间选点问题,ybt 1324:【例6.6】整数区间 是给定一些区间,选择一些点使得每个区间范围内至少有1个点。 本题为:给定一些区…...
数据库、数据仓库、数据湖有什么不同
数据库、数据仓库和数据湖是三种不同的数据存储和管理技术,它们在用途、设计目标、数据处理方式以及适用场景上存在显著差异。以下将从多个角度详细说明它们之间的区别: 1. 数据结构与存储方式 数据库: 数据库主要用于存储结构化的数据&…...
llama.cpp LLM_CHAT_TEMPLATE_DEEPSEEK_3
llama.cpp LLM_CHAT_TEMPLATE_DEEPSEEK_3 1. LLAMA_VOCAB_PRE_TYPE_DEEPSEEK3_LLM2. static const std::map<std::string, llm_chat_template> LLM_CHAT_TEMPLATES3. LLM_CHAT_TEMPLATE_DEEPSEEK_3References 不宜吹捧中国大语言模型的同时,又去贬低美国大语言…...
深度学习的应用场景及常用技术
深度学习作为机器学习的一个重要分支,在众多领域都有广泛的应用,以下是一些主要的应用场景及常用技术。 1.应用场景 1. 计算机视觉 图像分类 描述:对图像中的内容进行分类,识别出图像中物体所属的类别。例如,在安防领…...
小程序项目-购物-首页与准备
前言 这一节讲一个购物项目 1. 项目介绍与项目文档 我们这里可以打开一个网址 https://applet-base-api-t.itheima.net/docs-uni-shop/index.htm 就可以查看对应的文档 2. 配置uni-app的开发环境 可以先打开这个的官网 https://uniapp.dcloud.net.cn/ 使用这个就可以发布到…...
网件r7000刷回原厂固件合集测评
《网件R7000路由器刷回原厂固件详解》 网件R7000是一款备受赞誉的高性能无线路由器,其强大的性能和可定制性吸引了许多高级用户。然而,有时候用户可能会尝试第三方固件以提升功能或优化网络性能,但这也可能导致一些问题,如系统不…...
微信登录模块封装
文章目录 1.资质申请2.combinations-wx-login-starter1.目录结构2.pom.xml 引入okhttp依赖3.WxLoginProperties.java 属性配置4.WxLoginUtil.java 后端通过 code 获取 access_token的工具类5.WxLoginAutoConfiguration.java 自动配置类6.spring.factories 激活自动配置类 3.com…...
[STM32 - 野火] - - - 固件库学习笔记 - - -十三.高级定时器
一、高级定时器简介 高级定时器的简介在前面一章已经介绍过,可以点击下面链接了解,在这里进行一些补充。 [STM32 - 野火] - - - 固件库学习笔记 - - -十二.基本定时器 1.1 功能简介 1、高级定时器可以向上/向下/两边计数,还独有一个重复计…...
后台管理系统通用页面抽离=>高阶组件+配置文件+hooks
目录结构 配置文件和通用页面组件 content.config.ts const contentConfig {pageName: "role",header: {title: "角色列表",btnText: "新建角色"},propsList: [{ type: "selection", label: "选择", width: "80px&q…...
label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...
IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...
MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用
文章目录 一、背景知识:什么是 B-Tree 和 BTree? B-Tree(平衡多路查找树) BTree(B-Tree 的变种) 二、结构对比:一张图看懂 三、为什么 MySQL InnoDB 选择 BTree? 1. 范围查询更快 2…...
苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会
在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...
k8s从入门到放弃之HPA控制器
k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率(或其他自定义指标)来调整这些对象的规模,从而帮助应用程序在负…...
