TypeScript基础类型
string、number、bolean
直接在变量后面添加即可。
let myName: string = 'Tom'function sayHello(person: string) {return 'hello,' + person
}
let user = 'Tom'
let array = [1, 2, 3]
console.log(sayHello(user))function greet(person: string, date: Date): string {console.log(`hello,${person},today is ${date.toDateString()}`)let words = `hello,${person},today is ${date.toDateString()}`return words
}
greet('Tom', new Date())
any类型
可以随意赋值给any类型的变量。
还可以把any类型的变量当成方法调用。
let obj: any = { x: 0 }
obj.foo()
obj()
obj.bar = 0
obj = 'number'
const n: number = obj
let myName: string = 'Tom'
promise类型
下面返回的34不是普通的number类型,而是Promise类型的number
const geetNumber = async (): Promise<number> => {return 34//表示34不是普通的number类型,而是Promise类型的number
}
可选参数
可选参数未收到传参值时,是undefined,因此使用可选参数时,建议判断可选参数是否为undefined。
const printName = (person: { first: string; last?: string }): string => {//可选属性person.last可能为undefined,使用之前要判断是否为undefinedif (person.last !== undefined) {return person.first + person.last}return person.first + '先生/女生'
}
printName({ first: 'x', last: 'yy' })
printName({ first: 'x' })
联合类型 |
使用联合类型时,只能使用联合类型成员共有的方法。
比如toUpperCase()是string才有的方法,下面的联合类型由number和string构成,是不能使用toUpperCase()的。
解决办法:使用if else特判参数的类型。
//联合类型 |符号连接
function printId(id: number | string) {console.log('your id is' + id)
}
printId(111)
printId('111')
// printId({ id: 111 })error
使用type为类型取别名
type Point = {//需要使用等于号x: numbery: number
}
function printPoint(pt: Point) {console.log(pt.x, pt.y)
}
任意类型都可以使用type取别名。
接口定义类型
interface Point2 {//不要等于号,是一个对象x: numbery: number
}
function printPoint2(pt2: Point2) {console.log(pt2.x, pt2.y)
}
type和接口定义类型的区别
interface 的几乎所有功能都在 type 中可用,主要区别在于无法重新打开类型以添加新属性,而接口始终可扩展。
interface扩展接口 extends
interface Animal {name: string;
}
//bear是在extends了Animal基础上扩展了一个类型对象
interface Bear extends Animal {honey: boolean;
}
const bear = getBear();
bear.name;
bear.honey;
type扩展类型 &
type Animal = {name: string;
}
//bear是在Animal基础上再&一个类型对象进来
type Bear = Animal & { honey: boolean;
}
const bear = getBear();
bear.name;
bear.honey;
向现有接口添加字段
interface Window {title: string;
}
interface Window {ts: TypeScriptAPI;
}
const src = 'const a = "Hello World"';
window.ts.transpileModule(src, {});
类型创建后无法更改
type Window = {title: string;
}
type Window = {ts: TypeScriptAPI;
}// Error: Duplicate identifier 'Window'.
类型断言 as
假设你写了一条语句,TypeScript不一定知道那条语句返回什么,但你可能知道,你就能使用as断言那条语句返回值的类型。
const myDiv = document.getElementById('div') as HTMLDivElement
也可以使用尖括号语法(除非在.tsx文件中)
const myButton = <HTMLButtonElement>document.getElementById('btn')
因为类型断言在编译时被删除,所以没有与类型断言关联的运行时检查。如果类型断言错误,则不会产生异常或 null。
类型断言只能断言为更具体的或者更不具体的内容
而不能做可能的强制断言。
有时,合理的转换也会因为这个规则被报错,这时,可以先将类型推断为any或unknown再推断为别的类型。
const x = 'hello' as any as number
字面类型:特定的字符串和数字
字面类型:在类型位置引用特定的字符串和数字。
let和var创建的变量都是可以更改的,但const创建的不能更改。



争对const变量不能被赋值,但是又有几种可能情况时,我们就可以使用字面变量。
function setSize(size: 'large' | 'default' | 'small') {return size
}
function compare(a: string, b: string): -1 | 0 | 1 {return a === b ? 0 : a > b ? 1 : -1;
}
也可以与非字面量一起使用。
interface Options {width: number
}
function choose(op: Options | 'auto') {
}
choose({width:6})
choose("auto")
choose("autoWidth")//error
两种布尔字面类型:true和false,类型Boolean实质上就是这两种布尔字面类型联合起来的。
字面推断
下面这个对象中的counter自动被推断为number类型。

同理,在一个对象中,值为string的属性也会被推断为string。而string类型和字面类型的string是不一样的,直接将string类型参数赋值给字面类型的参数将会报错。
下面的代码中req.method是string类型,而handleRequest中第二个参数是字面类型。那样写会报错。
declare function handleRequest(url: string, method: 'GET' | 'POST'): void
const req = { url: 'https://example.com', method: 'GET' }
handleRequest(req.url, req.method)
//error,req.method是string类型,而handleRequest中第二个参数是字面类型。

解决这个问题有两个方法:
1、给传递过去的参数类型断言
const req = { url: 'https://example.com', method: 'GET' as 'GET' }
或者
handleRequest(req.url, req.method as 'GET')
2、用as const将整个对象参数转换为const类型
as const会为对象的所有属性分配字面类型。

null和undefined
JavaScript 有两个基础值用于表示值不存在或未初始化的值:null 和 undefined。
TypeScript 有两个对应的同名类型。这些类型的行为取决于你是否启用了 strictNullChecks 选项。
strictNullChecks关闭
可能是null或undefined的值可以正常访问,可以赋值给任何类型的属性。
strictNullChecks开启
建议在对该值使用方法或属性之前测试这些值。
function doSomething(x: string | null) {if (x === null) {// do nothing} else {console.log("Hello, " + x.toUpperCase());}
}
非空断言运算符 !
x的值可能为null,在调用x时,我们在其后方添加了一个!号断言他不为空,就可以使用number类型的方法toFixed(),这个做法可以跳过ts报错,但是可能会带来运行时错误。
function liveDangerously(x?: number | null) {// No errorconsole.log(x!.toFixed())
}
枚举
描述一个值,该值可能是一组可能的命名常量之一。
bigInt
const anotherHundred: bigint = 100n;
symbol
用来创建一个独一无二的值,可以用作对象的属性名,保证属性名的唯一性。
相关文章:
TypeScript基础类型
string、number、bolean 直接在变量后面添加即可。 let myName: string Tomfunction sayHello(person: string) {return hello, person } let user Tom let array [1, 2, 3] console.log(sayHello(user))function greet(person: string, date: Date): string {console.lo…...
长安链智能合约标准协议第二草案——BNS与DID协议邀请社区用户评审
长安链智能合约标准协议 在智能合约编写过程中,不同的产品及开发人员对业务理解和编程习惯不同,即使同一业务所编写的合约在具体实现上也可能有很大差异,在运维或业务对接中面临较大的学习和理解成本,现有公链合约协议规范又不能完…...
安防监控视频汇聚平台EasyCVR接入海康Ehome设备,设备在线但视频无法播放是什么原因?
安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…...
【Python + Django】表结构创建
以员工管理系统为例。 事前呢,我们先把项目和app创建出来,详细步骤可以看我同栏目的第一篇、第二篇文章。 我知道你们是不会下来找的,就把链接贴在下面吧: 【Python Django】启动简单的文本页面-CSDN博客 【Python Django】…...
解锁编程潜能:ChatGPT如何革新软件开发
目录 一、背景 二、功能描述 三、总结 一、背景 在这个飞速发展的数字时代,软件开发的效率和质量成了衡量一个开发者能力的重要标准。随着人工智能技术的不断进步,越来越多的开发者开始寻找能够提升工作效率的新方法。我就是其中之一,最近…...
内网使用rustdesk进行远程协助
文章目录 前言一、搭建rustdesk中继服务器二、搭建文件下载服务器三、创建引导脚本四、使用 前言 内网没有互联网环境,没法使用互联网上有中继服务器的远程协助工具,如teamviewer、todesk、向日癸等;在内网进行远程维护可以自己搭建中继服务…...
linux内核input子系统概述
目录 一、input子系统二、关键数据结构和api2.1 数据结构2.1.1 input_dev2.1.2 input_handler2.1.3 input_event2.1.4 input_handle 2.2 api接口2.2.1 input_device 相关接口input_device 注册流程事件上报 2.2.2 input handle 相关接口注册 handle指定 handle 2.2.3 input han…...
【解决报错】vi/vim修改文件时报错:Found a swap file by the name xxxxx
目录 报错内容报错原因解决方法 报错内容 vim打开文件提示: Found a swap file by the name xxxxx报错原因 使用vi或vim编辑器编写代码时由于网络不稳定(或其他种种原因)断开了连接,编辑好的代码没有运行和保存,再次…...
BRAM底层原理详细解释(1)
目录 一、原语 二、端口简述 2.1 端口简介 2.2 SDP端口映射 三、端口信号含义补充说明 3.1 字节写使能(Byte-Write Enable)- WEA and WEBWE: 3.2 地址总线—ADDRARDADDR and ADDRBWRADDR 3.3 数据总线—DIADI, DIPADIP, DIBDI, and D…...
GEE:为什么在机器学习分类或回归时,提取特征变量后的样本点下载到本地时,数据为空且缺少坐标?
作者:CSDN @ _养乐多_ 在博客《GEE:随机森林分类教程(样本制作、特征添加、训练、精度、参数优化、贡献度、统计面积)》和《GEE:随机森林回归预测教程(样本点、特征添加、训练、精度、参数优化、贡献度)》中,详细记录了在 Google Earth Engine(GEE)平台上进行机器学…...
电脑安装双系统windows和ubuntu server
1.创建Ubuntu-server的启动盘 首先要从官网下载Ubuntu-server18.04的ISO文件,用rufs烧录到U盘。如下所示 2. 磁盘分区 在windows创建两个盘(linuxboot 和linuxroot),后面一个一个用于boot,一个用于root. 3.开机U盘启…...
掌握这8大工具,自媒体ai写作之路畅通无阻! #媒体#媒体
在当今信息爆炸的时代,写作成为了人们表达思想、分享知识和传递情感的重要方式之一。对于很多人来说,写作并非易事。我们会陷入困境,无法找到灵感,我们会苦恼于语言表达的准确性,还有时候我们可能遭遇到了创作瓶颈&…...
「渗透笔记」致远OA A8 status.jsp 信息泄露POC批量验证
前言部分 在本节中,我会分两部分来说明致远OA A8 status.jsp 信息泄露的验证问题,其实就是两种验证方式吧,都一样,都是批量验证,主要如下所示: 通过Python脚本进行批量验证,但是前提是你可以收…...
uni-app打包证书android
Android平台打包发布apk应用,需要使用数字证书(.keystore文件)进行签名,用于表明开发者身份。 Android证书的生成是自助和免费的,不需要审批或付费。 可以使用JRE环境中的keytool命令生成。 以下是windows平台生成证…...
YOLOv5全网首发改进: 注意力机制改进 | 上下文锚点注意力(CAA) | CVPR2024 PKINet 遥感图像目标检测
💡💡💡本文独家改进:引入了CAA模块来捕捉长距离的上下文信息,利用全局平均池化和1D条形卷积来增强中心区域的特征,从而提升检测精度,CAA和C3进行结合实现二次创新,改进思路来自CVPR2024 PKINet,2024年前沿最新改进,抢先使用 💡💡💡小目标数据集,涨点近两个…...
数字孪生底层技术框架
数字孪生是一种将现实世界中的物理实体、过程或系统数字化并映射到计算机模型中的方法。它在数学建模与仿真方面具有重要作用,为了实现数字孪生,以下是一些底层技术框架和方法,希望对大家有所帮助。北京木奇移动技术有限公司,专业…...
docker和kubectl客户端安装Linux
一、docker安装 1.配置yum源(系统组) 2.查看可安装docker的所有版本 yum provides docker3.安装最新版本dockers yum install docker3.1确定版本没问题输入 y 4.验证 docker -v5.开启私有仓库的证书验证,没有创建一个daemon.json sudo vi…...
C++简单实现哈希查找
C 简单实现哈希查找 1. 哈希冲突 哈希表中可能会出现哈希冲突,即多个数据项映射到相同的桶。 常见的冲突解决方法包括链地址法(Chaining)和线性探测法(Linear Probing)。 使用链地址法时,每个桶维护一个链…...
计算机网络简答题:复试+期末
文章目录 1.计算机网络的功能:2.计算机网络的分类:3.主机间的通信方式:4.电报交换、报文交换、分组交换的区别:5.计算机网络的性能指标:6.0SI模型和TCP/IP模型:7.通信信通的方式:8.端到端的通信与点到点通信的区别:9.同步通信和异步通信:10.频分复用、时分复用、波分复用和码分…...
若依ruoyi-vue中的文件上传和下载
文章目录 文件上传后端实现前端实现 文件下载后端实现前端实现 在若依(Ruoyi)框架中,结合 Vue 前端框架,文件的上传和下载通常使用以下方法实现: 文件上传 若依现成的功能里面没有文件上传,但是集成了文件…...
OpenClaw新手避坑指南:Qwen3-14B镜像部署的5个常见失误
OpenClaw新手避坑指南:Qwen3-14B镜像部署的5个常见失误 1. 为什么需要这份避坑指南 第一次在本地部署OpenClaw对接Qwen3-14B镜像时,我踩遍了所有能想到的坑。从CUDA版本冲突到显存溢出,从端口占用到凭证失效,整个过程就像在玩&q…...
Slurm集群上跑Python脚本,如何让每个节点都认得你的Conda环境?(附完整脚本)
Slurm集群中Python脚本的Conda环境跨节点部署实战指南 在高校和科研机构的计算集群环境中,Slurm作为主流的作业调度系统,为大规模计算任务提供了强大的资源管理能力。然而,许多初次接触Slurm的研究人员都会遇到一个令人头疼的问题——在登录节…...
Word样式与多级列表深度绑定指南:让你的标题编号“活”起来,增删章节不再乱
Word样式与多级列表深度绑定指南:让你的标题编号“活”起来,增删章节不再乱 每次在Word中调整文档结构时,你是否经历过这样的崩溃瞬间:精心排版的章节编号突然乱成一团,原本整齐的"1.1"变成了毫无规律的&quo…...
避坑指南:ROS2与NVIDIA Isaac Sim联调机械臂,我踩过的那些“坑”
ROS2与NVIDIA Isaac Sim联调机械臂:开发者避坑实战手册 当机械臂在虚拟环境中突然抽搐起舞,当关节角度指令像被黑洞吞噬般消失无踪——这些场景对尝试将ROS2与NVIDIA Isaac Sim联调的开发者来说并不陌生。作为经历过数十次配置崩溃的老兵,我将…...
SmallThinker-3B-Preview代码生成效果展示:Java八股文智能问答实例
SmallThinker-3B-Preview代码生成效果展示:Java八股文智能问答实例 最近在技术社区里,一个名为SmallThinker-3B-Preview的模型引起了我的注意。它主打代码生成和智能问答,特别是针对编程面试中那些经典的“八股文”问题。作为经常参与面试和…...
5分钟部署MinerU 2.5-1.2B:PDF转Markdown零门槛入门教程
5分钟部署MinerU 2.5-1.2B:PDF转Markdown零门槛入门教程 1. 为什么选择MinerU处理PDF文档 在日常工作和学习中,我们经常需要处理PDF文档。无论是技术文档、学术论文还是商业报告,PDF格式因其良好的跨平台兼容性而广受欢迎。然而,…...
GLM-OCR辅助Anaconda环境下的数据分析:自动识别图表中的数据标签
GLM-OCR辅助Anaconda环境下的数据分析:自动识别图表中的数据标签 你是不是也遇到过这种情况?从一份PDF报告或者一篇学术论文里,看到一张特别有价值的图表,上面有你想分析的数据趋势。但问题是,这些数据都“锁”在图片…...
原生 JS 实现图片预览上传组件:多图上传 + 拖拽上传 + 裁剪预览 + 进度显示(附完整源码)
前言图片上传是前端开发中高频且核心的功能场景,如头像上传、素材管理、表单提交等。本文基于原生 HTMLCSSJavaScript 实现一套企业级图片预览上传组件,包含多图选择、拖拽上传、实时预览、图片裁剪、上传进度显示、文件大小 / 格式校验等功能࿰…...
Linux下进行用户的切换与创建以及细微设置
目录 为什么要创建普通用户 创建新用户 Step1:正确登入自己的云服务器 add指令添加普通用户 passwd设置登录密码 查看所有用户 ls/home cat/etc/passwd cat /etc/passwd |cut -d: -f 1-3 lastlog su -l切换用户 查看当前为何用户 删除用户 编辑 sud…...
WarcraftHelper:解决经典游戏兼容性问题的技术增强方案
WarcraftHelper:解决经典游戏兼容性问题的技术增强方案 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 当玩家在现代硬件上运行魔兽争霸II…...
