Typescript – 类型声明

简介

- 类型声明是TS非常重要的一个特点

- 通过类型声明可以指定TS中变量(参数、形参)的类型

- 指定类型后,当为变量赋值时,TS编译器会自动检查值是否符合类型声明,符合则赋值,否则报错

- 简而言之,类型声明给变量设置了类型,使得变量只能存储某种类型的值

 

声明变量

let 变量: 类型;
      
  let 变量: 类型 = 值;
      
  function fn(参数: 类型, 参数: 类型): 类型{
          ...
 }

 

Typescript 中的类型

类型 例子 描述
number 1, -33, 2.5 任意数字
string 'hi', "hi", hi 任意字符串
boolean true、false 布尔值true或false
字面量 其本身(如 let a:10) 赋值了就不能再改了,类似常量
any * 任意类型
unknown * 类型安全的any
void 空值(undefined) 没有值(或undefined)
never 没有值 不能是任何值
object {name:'孙悟空'} 任意的JS对象
array [1,2,3] 任意JS数组
tuple [4,5] 元素,TS新增类型,固定长度数组
enum enum{A, B} 枚举,TS中新增类型

 

number 类型

let decimal: number = 6;  // 整数
let hex: number = 0xf00d;  // 十六进制
let binary: number = 0b1010; // 二进制
let octal: number = 0o744;  // 八进制
let big: bigint = 100n;  // 大整型

 

object 类型

object 表示一个 js 对象

let a : {name: string}

a = {name: 'TZMing'}

 

? 可选属性

按上面的代码来看,如果具有类型约束的情况,当出现以下条件时就会报错

a = {name: 'TZMing', age: 18}  // 报错,原对象中没有 age 属性

那么可以使用 可选属性 来声明某个属性在赋值时可有可无

let a : {name: string, age?: number}

 

任意添加任意属性

当我们对对象做任意添加属性时,因为类型约束被限制,但是我又想往对象中加入多个属性时,可以声明任意添加属性。

let a : {name: string, [propsName: string]: any}
a = {name: 'TZMing', age: 18, class: '一班', ....}

[propsName: string]  指的是接收一个用于存放“其它”属性值的属性名,众所周知, js 的属性名其实都是 string 类型的,所以[propsName: string]  表示接收多个属性名,

[propsName: string]: any  则为能接收多个属性名和任意属性值。

 

array 数组类型

数组的类型

声明方法一:

let arr: number[]
let arr: string[]

声明方法二:
let arr: Array<number>;
let arr: Array<string>;

 

tuple元组类型

元组就是固定长度的数组

它和数组的区别是,数组是可变成员类的,而元组是固定成员数量,固定每个成员的类型

let tup:[string, number];
tup = ['hello', 123]

 

enum 枚举类型

枚举类型是用于方便开发者识别某些可选值的,比如姓别只有男和女,我们通常不会直接使用 '男' 或 '女' 去存储,通常会使用某些值来代替姓别,比如 '0' 代表 '女','1' 代表 '男',但是使用 0,1 来表示男女姓别可读性非常低,可以使用 enum 来别名 0 和 1 的。

enum Gender {
  Male = 1,
  Female = 0
}

这样直接使用 MaleFemale来表示 0 和 1。甚至可以用 MaleFemale来表达性别了。这种情况通常使用在可选项上。

 

any 类型

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

let a: any
a = 'string'
a = 10
a = true

 

unknown 类型

unknown 表示未知类型的值,实际上就是一个类型安全的 any 类

unknown 类型的变量,不能直接赋值给其他变量

let res: string;
let a: any = 10;
res = a; // 在 a 是 any 情况下,系统不管 res 和 a 的类型是否一样

 

在它还没有确定好类型之前,它不能赋给任何变量

let res: string;
let b: unknown = 'hello';
res = b; // 在 b 是 unknown 情况下,报错,系统不允许 unknown 类值赋给别的类型,那怕它的值和被赋的值类型一样

res = b as string;  // 但是当 b 的值被确定为 string 类时,就可以赋值

 

字面量赋值

所谓的字面量赋值是指,把某一值或某若干值作为类型,比如下面的代码

let a: number = 10   // a的类型是 number , 值是 10

字面量赋值,单个字面量
let a: 10  // a的类型是 10 , 值也是 10,和 const 类似

若干个字面量贼值
let a: 'man' | 'women'  // a的类型可以是 'man' , 也可以是 'women'
a = 'xxx'  // a不能是除 'man' 和 'women' 以外的值了。

类型作为字面量
let a: string | number  // a的类型可以是 string 类 , 也可以是 number 类

& 表示同时满足多个类型的值
let a:{name: string} & {age: number}
即 a 对象中,必须满足 name: string 的值,同时也要满足 age: number 的值
let a: string & number  --> 要求 a 的值既是 string 类的 也是 number 类的。

 

多类型变量

在 TS 中,一个变量不止可以声明单个类型,还可以声明多个类型,它分为 "或" 和 "且"

或( | )  是指,一个变量中,它可以既满足一种类型,也满足另一种类型

let a: string | number;  // 既可是 string 类型的值,也可以是 number 类型的值
let a: 'man' | 'women';  // 即可以是 'man' , 也可以是 'women'

let a: {name: string} | {age: number};   // 既可以只包含name的对象,也可以是只包含 age 的对象

且( & ) 是指,一个变量中,它既要满足一种类型,也要满足另一种类型

let a: string & number;  // 值既要是 string 类的,也要是 number 类的(不实际)
let a: 'man' & 'women';  // 即要是 'man' , 也要是 'women'(不实际)

let a: {name: string} & {age: number};   // 既包含name的对象,也要包含 age 的对象

 

 

void 类型

void 用来表示空,以函数为例,就表示没有返回值的函数

return undefined 类型

return null 类型

都可以是 void 类型

function foo() : void {
  return null;  // 允许返回
  return undefined;  //  允许返回
  return;  // 允许返回

  return 'string';  //  报错,不允许
}

 

never 类型

never 表示永远不会返回结果,永远不会有值

与 void 类型不同的是,它连 nullundefined都不允许返回,用的比较少

function foo() : never {
  return null;  // 报错,不允许
  return undefined;  //  报错,不允许
  return;  // 报错,不允许
  return 'string';  //  报错,不允许
}

 

如果您喜欢本站,点击这儿不花一分钱捐赠本站

这些信息可能会帮助到你: 下载帮助 | 报毒说明 | 进站必看

修改版本安卓软件,加群提示为修改者自留,非本站信息,注意鉴别

THE END
分享
二维码
打赏
海报
Typescript – 类型声明
- 类型声明是TS非常重要的一个特点 - 通过类型声明可以指定TS中变量(参数、形参)的类型 - 指定类型后,当为变量赋值时,TS编译器会自动检查值是否符合类型声明,符合则赋值,否则报错 - 简而言之,类型声明给变量设置了类型,使得变量只能存储某种类型的值
<<上一篇
下一篇>>