如何进行类型约束
- 仅需要在 变量、函数的参数、函数的返回值后加上
:类型
let name: string;
function sum(a: number, b: number): number{
return a + b;
}
let num: number = sun(3,4);
源代码和编译结果的差异
- 编译结果中没有类型约束信息
基本类型
-
number : 数字
-
string : 字符串
-
boolean : 布尔值
-
object: 对象
-
数组
let nums: number[] = [1, 1, 2];
let nums: Array<number> = [1, 2, 3];
- null 和 undefined
null 和 undefined是所有其他类型的子类型 他们可以赋值给其他类型
strictNullChecks: true
配置文件
严格的空类型检查 null和undefined不能赋值给其他类型 只能赋值给自身
其他类型
联合类型
多种类型任选其一
let name: string | undefined = undefined;
配合类型保护进行判断
类型保护:
当对某个变量进行类型判断以后,在判断的语句块中便可以确定它的类型 可以通过typeof
触发基本类型的类型保护
void类型
通常用于约束函数的返回类型 表示函数没有任何返回值
never类型
通常用于约束函数的返回类型 表示函数永远不可能结束
字面量类型
使用一个值进行约束 只能用这个值进行赋值
let gender: "男" | "女"; /* 字面量类型 + 联合类型*/
gender = "男";
gender = "女";
let arr:[]; /* 字面量类型约束 arr只能是一个空数组*/
let user:{
name:string
age :number
}
元祖类型(Tuple)
一个固定长度的数组 且数组中每一项的类型确定
let tuple: [number, string];
tuple = ['123', 111];
any类型
可以绕过类型检查 因此 any类型的数据可以赋值给任意类型
类型别名
对已知的一些类型定义名称
type 类型名 = ...
type User = {
name:string
age:number
gender:"男" | "女"
}
let user: User;
函数的相关约束
- 函数重载:在函数实现之前,对函数调用的多种情况进行声明
function combine(a: string, b: string): string{
}
function combine(a: number, b: number): number{
}
function combine(a: string | number, b: string | number): string | number{
}
- 可选参数 可以在某些参数名后加上问号 代表该参数可以不用传递。
- 可选参数必须在参数列表的末尾
function sum(a: number, b: number, c?:number): number{
if(c){
// 触发类型保护
return a + b + c;
}else {
return a + b;
}
}
sum(1, 2);
sum(1, 2, 3);
- 默认参数 可以给参数设置一个默认值 不能和可选参数同时使用
function sum(a: number, b: number, c:number = 4): number{
}