【TypeScript(一)】TypeScript的变量类型及声明

本文详细介绍了TypeScript中的变量类型和声明,包括基本类型、联合类型、any和unknown的区别、void与never的使用,以及object、array、tuple和enum等。通过示例展示了类型声明如何提高代码安全性和规范性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TypeScript的变量类型及声明

TS和JS最大的区别就是在其中给变量引入了类型的概念

比如像之前我们使用JS的时候:

var a = 10;这时a是数据类型,但当如果我们后面要使用a;我们也可以a = "hello";这时a就变成了一个字符串类型。也就是说我们在js中没有严格的类型的规范,我们可以随意使用它。

但是TS则不同,通过TS我们就可以给变量声明类型。

一、变量类型

1、变量类型

在TS中我们可以指定变量的类型。如:

let a:number;

通过以上声明有什么用处呢?那就是a在以后的使用过程中,a的值只能是数字不能像js一样这次可以赋值为数字,下次可以赋值为字符串。

如果变量的声明和赋值同时进行,TS可以自动对变量进行类型转换,那我们就不用写变量类型,像这样:

let a = 12;///此时TS默认认为变量的类型是数字的形式
let c = fasle;那么以后我们对c只能赋值为boolean类型,因为他会自动推断c的类型

既然说直接赋值可以自动判断类型,那么是不是类型声明就是没有什么用了呢?

2、类型声明的应用

1)给函数声明时的参数使用

当然不是,JS中的函数是不考虑参数的类型和数量,写函数的时候不用考虑类型和数量,但是可能会造成安全的隐患,比如像两个数相加的函数,不小心传过去了一个字符串,那就变成了字符串拼接。

那么类型声明就有用了,我们可以在函数声明的时候,给参数加上类型声明,不会发生上述的情况。可以保证传入的类型不会错,不会出现难找的错误。避免在开发中可能会发生的错误。(语法上相当于js更加的规范)

2)函数的返回值也会用到类型声明

function sum( a: number, b: number):number {返回值为number

​ return a+b;返回值的类型必须是number类型

}

总结:

类型声明可以在声明时使用

如果数据的声明和赋值同时进行。可以省略类型声明

可以在函数参数和返回值上使用类型声明

二、变量声明

下面让我们来具体的看一下都有哪些函数声明吧!

1、类型都包括:number、string、boolean(基本的)、或者可以直接使用字面量来声明类型。

如:
1)let a:10; a =11;///就会报错,类似const,赋值后不能改

2)let b:"male"|"female";/使用|来连接多个类型,b的值只能有这两种

3)let c:boolean|string;/c的值可以是两种类型

这种类型叫联合类型

2、any和unknown类型

1)let d:any;/any表示的是任意类型,可以任意赋值

需要注意的是: (let d;隐式声明,也是any类型)

一个变量设置为any后,相当于对该变量关闭了TS的类型检测,就变得和js一样了

如果声明时不指定变量的类型,则默认解释为any类型

2)let e:unknown;表示未知类型的值

any和unknown的区别是什么呢?

1)当我们声明一个string类型的变量,如果我们把any类型的值赋给string的变量但是他不会报错。

2)但是当我们是unknown的类型,把unknown类型的值赋值给别的类型就会报错。

总结:unknown实际上是一个类型安全的any,不能直接赋值给其他变量

但是如果想把unknown类型的值赋值给其他类型怎么办呢?

方法一:

if(typeof e === "string"){

​		s = e;///s为unknown类型   e为string类型

}

方法二:类型断言(告诉编译器e(变量的实际的类型)的类型)

s = e as string;(第一种写法)

s = <string>e;(第二种写法)

3、void(空值)、never(没有值)设置函数的返回值

function fn():number{/指定返回值类型return 1;

}

1)当函数没有返回值,就用void来表示,void用来表示空,以函数为例,表示当前函数没有返回值。

2)never:类似void但是never表示永远不会返回结果(没有值)

用途:用来报错的

function fn():never{throw new Error("报错了!")}

4、其他类型:

1)object表示一个js对象

let a:object;

a  = {};

a = function(){

}
let b :{ name:string,age?:number};///问号表示一个可选属性,可以有也可以没有;{}里面写包含哪些属性

如果想让对象有多个可有可无的属性怎么办?

let c : { name:string,[propName(自定义名字) : string]:any }///表示任意类型的属性

c = {name:'啊啊啊',age:18,gender:'男'}

2)array数组(两种声明方法:类型[]、Array<类型>)

let e : string[];表示字符串数组(数组里寸的都是字符串)

let f :number[];///表示数值类型的数组

let g : Array<number>;表示数值类型的数组

3)tuple元组:就是固定长度的数组

元组和数组的区别:元组的效率会好一些,元组长度固定的

let h : [string,string];这个元组有两个值,类型都是string

4)enum枚举:

enum Gender{

​	Male = 0,

​	Female = 1

}

let i : { name:string , gender:Gender};

i = {

​	name : 'su',

​	gender:  Gender.Male//male  因为要给别人用所以要考虑

}

//&表示同时,一个类型即是string又是number

let j : string & number;///没有意义

let j : {name:string} & {age:number};///对象中同时有两个类型

类型的别名:

type myType = 1|2|3|4|5;

let k:1|2|3|4|5;k值的范围(直接写let k : myType;)

let l:1|2|3|4|5;

这样写很麻烦因为是同样的内容我们要写很多遍,所以我们可以使用别名

type myType = string;给string起别名
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值