TypeScript学习笔记——第二节

1. 类型限制

1. ts可以在变量声明时规定类型

let a: number //规定了变量a的值只能是number
let b: string //规定了变量b的值只能是string
b = false //报错,类型不匹配

2. 如果变量的声明和赋值同时进行,ts会自动规定类型

let c = “hello” //自动规定变量c为string类型,此处可以省略类型声明

3. 对函数进行类型限制

function sum(a: number, b: number): number{
	return a + b
}

上述代码,ts规定了sum函数的参数,返回值类型都为number,当类型不匹配时会报错,此外,ts还会限制传入的实参个数,不同于形参个数时同样报错
需要注意的是,初始ts虽然会报错,但仍可以编译,并产生对应的js文件

2. TS的类型

在这里插入图片描述

1. 字面量类型

let a: 10; //规定变量a的值只能为10
a = 10;
a = 11; // 报错:不能将类型“11”分配给类型“10”
let sex: "male" | "female"; 
sex = "male";
sex = "female";
// 可以使用|(且)来连接多个类型(联合类型)
// 也可以使用&(或)详细看object类型
let b: string | boolean; 
b = "hello";
b = false;

2. any类型

any表示的是任意类型,设置类型为any后,相当于ts对该变量关闭了类型检测(使用极少)

let d: any; //显式指明类型为any
let e; //声明时不赋值,不指明类型,会自动看做any类型(隐式指明)
d = 10;
let f: string = d; 
//d的类型是any,可以赋值给任意类型的值(区别于unknown类型)

3. unknown类型

unknown表示的是未知类型

let g: unknown = "hello";
g = false
let f: string = g; //此处会报错,类型不匹配(区别于any类型)

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

  1. 赋值前进行类型判断
  2. 类型断言:用来告诉解析器变量的实际类型
let e: unknown = "hello"
s = e; //直接赋值会报错
s = e as string;
s = <string>e;
 语法:变量 as 类型 或 <类型>变量

4. void类型

void用来表示空值(undefined),多用于规定函数没有返回值

function fn(): void {} //表示函数没有返回值

5. never类型

never表示永远不会返回结果

6. object类型

object表示对象(很少使用)

//基本使用(对象)
let a: object;
a = {};
a = function(){}

//规定对象的属性组成及类型
let b: {name: string, age?: number};//属性名后跟?表示可选属性
b = {};//报错:缺少类型
b = {name: 'wmh'};
b = {name: 'wmh', age: 18}

//规定除了name属性必需,还可以添加其他属性(属性名为string,值为any)
let e : {name: string, [propName: string]: any};

//使用&来判断满足两个对象
let f : {name: string} & {age: number};//表示需要同时满足两个内容
f = {
	name: 'wmh',
	age: 18
}
//基本使用(函数)
let a:(b: number, c:number) => number;//规定参数及返回值的类型
a = function(b, c){return b + c}

7. array类型

array表示一个数组

//写法一
let a: string[];//表明一个字符串数组
a = [12,12,12];//报错:类型不匹配
//写法二
let b: Array<number>;//表示一个数字数组

8. tuple类型

tuple表示一个元组,元祖就是固定长度的数组

//基本使用
let a: [string, string];
a = ['wmh', 'abc'];

9. enum类型

enum表示一个枚举,

//使用方法
enum Sex {
	Female,
	Male
}
let person: {name: string, sex: Sex};//规定sex为Sex枚举类
person = {
	name: 'wmh',
	sex: Sex.Male
}
if(person.sex === Sex.Male)

3. 其他有关于类型使用

1. 类型的别名

type myType = string;
let a: myType;//相当于let a: string

版权声明:本文为Twi_TiAmo原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。