TypeScript学习(2)- ts基本类型

news2024/11/24 6:55:09

        类型声明式Ts非常重要的一个特点,通过类型声明可以指定TS中变量(参数,形参)的类型。指定类型后,当为变量赋值时,ts编译器会自动检查值是否符合类型声明,符合则赋值,否则报错。

目录

ts的所有类型 

类型声明

(1)类型声明示例

 (2)字面量类型声明

(3)联合类型 

(4)ts特有类型-any

(5)ts特有类型-unknown

(6)类型断言

(7) ts特有类型-void

(8)object类型

(9)array类型

 (10)ts特有类型-tuple

(11)ts特有类型-enum

(12)类型别名


ts的所有类型 

  • number、 string、boolean、Object、array ...是js都有的类型
  • TS特有的数据类型:tuple(元祖)、enum(枚举)、any(任意类型)、unknow、neve

类型声明

(1)类型声明示例

let a:number
// a的类型设置为number,在以后的使用过程中a的值只能是数字
a = 10

let b:string
b = 'hello' 

let c:boolean
c = true 

let d:object
d = {}

//function 参数确定类型
function sum(a:number,b:number){
    return a+b
}
// sum('1',2) //会报错
sum(1,2)

注意:如果变量的声明和赋值是同时进行的,TS可以自动对变量进行类型检测

// 如果变量的声明和赋值是同时进行的,TS可以自动对变量进行类型检测
let c = false  //此时已经定义变量c 为boolean类型了
// c = 'a'  // 把其他类型的值赋值给c  就会报错
c = true

 (2)字面量类型声明

let a2:10 //在此时就给a2 定义了10这个字面量的类型,之后对a2赋值只能赋10,否则报错
a2 = 10
// a2 =11 //就会报错 

let a3:小美
a3 = 小美
// a3 = 小美 //就会报错 

(3)联合类型 

可以使用 “| 连接多个类型(联合类型)

//字面量联合类型
let b2:'male' | "female"
b2 = 'male'
b2 = "female"
// b2 = 'hello' //error  当赋值是其他 就会报错
console.log("b2",b2)

//声明联合类型
let c2: boolean | string  //c2的赋值就可以是boolean 或者string  类型
c2 = 'hello'
c2 = true
//c2 = 10  //error 报错
console.log(c2)

“&”且

let j:{name:string} & {age:number}
j = {name:'小美',age:18}

(4)ts特有类型-any

        any 表示的任意类型  不建议使用;一个变量设置类型为any后相当于对该变量关闭了TS的类型检测

let d2: any
d2 = 'hello'
d2 = 1
d2 = true
console.log(d2)

(5)ts特有类型-unknown

        unknown 表示未知类型的值

let e2: unknown
e2 = 'hello'
e2 = 1
e2 = true
console.log(e2)

注意:当unknown类型的值 再次赋值给确定类型的变量时,会报错

例如:

 unknown类型的e3 赋值给 string类型的 s  虽然e3赋值了string类型的值,但还是会报错

let e3:unknown
e3 = 'hello'
let s:string; 
s = e3 //报错 unknown类型的变量,不能直接赋值给其他变量

(6)类型断言

        类型断言(判断),可以用来告诉解析器变量的实际类型

可以解决上面的问题(unknown类型的变量,不能直接赋值给其他变量)啦

语法:

(1)变量  as 类型
(2)<类型> 变量

例子:

let e3:unknown
e3 = 'hello'
let s:string; 
s = e3 as string; //当e3类型string
//s = <string> e3;//或者
console.log(s, e3); //hello ,hello

类型断言使用场景
1.消除类型检查错误
        有些情况下,开发者明确知道某个变量的类型,但是TypeScript的类型检查

function f():void{

}

器并不能推断出这个类型。这时可以使用类型断言,将变量的类型强制转换为开发者指定的类型,从而消除类型检查错误。

2. 处理联合类型
        当一个变量的类型是多种类型的联合类型时,如果开发者想要使用其中一个类型的属性或方法,可以使用类型断言将其转换为该类型,以便进行后续操作。

3. 处理any类型和unknown
        有时开发者需要使用any类型的变量,但是any类型会降低代码的类型安全性。如果能够明确知道该变量的类型,可以使用类型断言将其转换为该类型,以提高代码的类型安全性。

(7) ts特有类型-void

js中没有空值的概念,void 用来表示为空

以函数为例,就表示没有返回值的函数

function f():void{}

声明一个 void类型的变量没有什么用,因为只能将其赋值为undefined 

let a6: void = undefined // 正确的

(8)object类型

let a4 : object
a4 = {}
a4 = function (){}

在js中一切皆对象,所以object类型在开发过程中并不实用

在定义对象时,一般限制对象里属性的类型

例子:

let b4 : {name : string}
b4 = {name:'小美'}
//b4 = {name:18} //error
//b4 = {name:'小美',age:18} //error 多了属性 少了属性也不行


//在属性名后边加上 ?表示属性是可选的
let b5 : {name : string age ?:number};
b5 = {name:'小帅'} //可
b5 = {name:'小帅',age:88} // 可

//当不确定属性类型有多少时
//[propName : string]:any 表示任意类型的属性
let c4 : {name : string ,[propName : string]:any};
c4 = {name:'小草',age:88,gender:'男'}


当定义函数时,一般控制传参的类型和返回值的类型

设置函数结构声明语法:

语法 : (形参:类型,形参:类型,...) => 返回值

例子:

//d4 是一个函数,有两个number类型的参数,返回值也是number类型
let d4 :(a:number,b:number)=>number
d4 = function(n1,n2):number{
    return 3
}

(9)array类型

数组的声明方式:

类型[]
Array<类型>

例子:

let e:string[]
e = ['a','b','c']
// e = ['a','b',1] //error

let f4: Array<number>
f4 = [1,2,3]

 (10)ts特有类型-tuple

元组,元组就是固定长度的数组

语法:

[类型,类型]
let h: [string,string ]
h = ['1','2']
// h = ['1','2','3']//error

(11)ts特有类型-enum

枚举

enum Gender{
    Male,
    Female
}
let i :{name:string,gender:Gender}
i ={name:'小刚',gender:Gender.Male}

(12)类型别名

        起别名不会新建一个类型 - 它创建了一个新名字来引用那个类型。给基本类型起别名通常没什么用。类型别名常用于联合类型。

例子:

type  mytype = string  //mytype等价于string
let j:mytype  
j = '哈哈哈'


type mytype  = string | number | boolean
let j :mytype  
j = '哈哈哈'
j = 18
j = true

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

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

相关文章

从VAE到Diffusion生成模型详解(1):VAE

文章目录 1. 生成式模型简介2. PixelRNN/CNN3. VAE3.1 自编码器AE3.2 VAE基本原理3.3 VAE公式推导 4. 参考 1. 生成式模型简介 什么是生成式模型 给定训练集&#xff0c;产生与训练集同分布的新样本。如下图所示&#xff0c;希望学习到一个模型 p m o d e l ( x ) p_{model}(…

22 分页控件

文章目录 界面设置初始化主对话框子页面初始化 页面1枚举窗口页面2枚举进程全部代码 界面设置 ui 设置 >创建CTablCtrl > 创建页控件&#xff08;子窗口&#xff09;&#xff0c;style设置成为chlid 添加类 页面中加入listCtrl 控件 添加变量 分别添加初始化函数 初始化…

举例说明单层神经网络的工作原理

假设我们有一个简单的单层神经网络&#xff0c;用于解决一个简单的问题&#xff1a;根据一个人的年龄&#xff08;x&#xff09;来预测其收入&#xff08;y&#xff09;。在这个例子中&#xff0c;输入数据只有一个特征&#xff08;年龄&#xff09;&#xff0c;因此我们可以用…

Can转以太网网关can协议转以太网协议

YC-ETH-CAN-2 是一款用来把 CAN 总线数据转为网口数据的设备。网口支持 TCP Sever、TCP Client、UDP Sever、UDP Client、UDP Broadcast 模式&#xff0c;可以通过软件配置和网页配置。 设备提供两路 CAN 接口&#xff0c;两路 CAN 可分别配置为不同的工作模式&#xff0c;独立…

[QT编程系列-4]:C++图形用户界面编程,QT框架快速入门培训 - 2- QT程序的运行框架:信号、槽函数、对象之间的通信

目录 2. QT程序的运行框架 2.4 设计界面元素的行为&#xff1a;信号、槽函数、对象之间的通信 2.4.1 对象之间的通信 2.4.2 信号槽与消息队里区别 2.4.3 预定义信号与默认槽函数 2.4.4 预定义信号与默认槽函数&#xff1a;案例2 2.4.5 预定义信号与自定义槽函数&#xff…

【JVM系列】类加载机制和双亲委派机制(一)

使用java8 一、类加载运行全过程 当我们用java命令运行某个类的main函数启动程序时&#xff0c;首先需要通过类加载器把主类加载到JVM。 package jvmdemo;public class Math {public static final int initData 666;public static User user new User();public int comput…

立创EDA(专业版)电路设计与制作快速入门

1.新建工程的时候 &#xff08;要注意用版本控制&#xff0c;项目名&#xff0c;日期&#xff0c;版本&#xff09; 2.原理图设计环境设置 3.电源转换电路 电源是一般是5v转3.3v电路 电源主要的可以选择LLDO来降压的或者是DCDC减压 这个电路主要是用LDO来降压的 AMS1117降…

操作系统Linux—day01

编程 网页 软件 网站项目 知识点&#xff1a; 前端页面&#xff1a;HTML css JavaScript JQuery VUE 数据库&#xff1a;Oracle MySQL 服务器&#xff1a;服务器的操作系统Linux Http://115.159.96.174:8090/EasyBuy/ www.baidu.com>http://180.101.49.12/ 后台技术…

【iOS】消息传递

Objective-C是一种动态语言&#xff0c;因此其很多行为是在运行时决定的。对于静态语言来说&#xff0c;函数的调用在编译时就已经确定。动态语言则不然&#xff0c;动态语言通过一些巧妙的机制使得函数的真实调用是在运行时决定的&#xff0c;即动态语言的特点是将一些决定性的…

2、常用基本命令-文件

Shell 可以看作是一个命令解释器&#xff0c;为我们提供了交互式的文本控制台界面。我们可以 通过终端控制台来输入命令&#xff0c;由 shell 进行解释并最终交给内核执行。 本章就将分类介绍 常用的基本 shell 命令。 7.1 帮助命令 7.1.1 man 获得帮助信息 1&#xff09;基本…

大于100万行数据如何转换坐标、格网生成和裁剪、低格网数据提取

在工作过程中&#xff0c;对于100万以下的数据&#xff0c;我们一般使用EXCEL进行操作&#xff0c;但对于大于1百万行的数据&#xff0c;EXCEL也无能为力。此时&#xff0c;解决办法有三种&#xff1a;&#xff08;1&#xff09;拆分成几个小于100万的文件&#xff0c;再用EXCE…

机器学习原理

此次主要是由分类来引出 由于宝可梦的图片比较简洁&#xff0c;而数码宝贝的图片就显得比较复杂&#xff0c;我们计算出他们的轮廓&#xff0c;求出白色数量的多少。 e的函数会计算线条的复杂程度。当得出的线条的复杂程度&#xff0c;小于h。我们认为其是宝可梦&#xff0c;反…

Python(七)二进制

❤️ 专栏简介&#xff1a;本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中&#xff0c;我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 &#xff1a;本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

Mac非brew方式安装OpenResty教程

本文版本基于openresty-1.15.8.1和pcre-8.4.4安装。 一、安装前准备 由于openResty本质上还是基于nginx和Lua的高性能Web平台&#xff0c;安装openResty前需要先安装好openssl和pcre。 小编的机器因为之前安装过nginx&#xff0c;所以openssl和pcre已经有了。openssl的安装目…

Python(六)转义字符和原字符

❤️ 专栏简介&#xff1a;本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中&#xff0c;我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 &#xff1a;本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

包管理工具:npm、yarn、cnpm、npx、pnpm

yarn&#xff1a;  yarn是由Facebook(react)、Google、Exponent 和 Tilde 联合推出了一个新的 JS 包管理工具&#xff1b;  yarn 是为了弥补早期npm 的一些缺陷而出现的&#xff1b;  早期的npm存在很多的缺陷&#xff0c;比如安装依赖速度很慢、版本依赖混乱等等一系列…

【LeetCode: 1911. 最大子序列交替和 | 暴力递归=>记忆化搜索=>动态规划 】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

【C#】设置输入法,解决扫描枪在中文状态下识别异常问题

系列文章 【C#】编号生成器&#xff08;定义单号规则、固定字符、流水号、业务单号&#xff09; 本文链接&#xff1a;https://blog.csdn.net/youcheng_ge/article/details/129129787 【C#】日期范围生成器&#xff08;开始日期、结束日期&#xff09; 本文链接&#xff1a;h…

【Redis】特殊数据类型 Stream (流)

&#x1f3af;前言 除了五中基本的数据类型外&#xff0c;Redis还支持两种特殊的数据类型&#xff0c;第一种 Geo (地理位置)&#xff1a;用于存储地理位置相关的数据&#xff0c;例如经纬度、距离等。第二种 Stream (流)&#xff1a;是一个高级的列表类型&#xff0c;支持对列…

学习系统编程No.30【多线程控制实战】

引言&#xff1a; 北京时间&#xff1a;2023/7/7/9:58&#xff0c;耳机正在充电中&#xff0c;所以刚好让我们先把引言写一写&#xff0c;昨天睡觉前听了一会小说&#xff0c;听小说的好处就在于&#xff0c;它可以让你放下手机&#xff0c;快速睡觉&#xff0c;并且还有一定的…