一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第2天,点击查看活动详情。
null和undefined类型
在TypeScript中,也有undefined 和 null 这两个基本数据类型,也就意味着它们既是实际的值,也是自己的类型:
let n: null = null;
let u: undefined = undefined;
any类型
在某些情况下,我们确实无法确定一个变量的类型,并且可能它会发生一些变化,这个时候我们可以使用any类型(类似于Dart语言中的dynamic类型)。
any类型有点像一种讨巧的TypeScript手段:我们可以对any类型的变量进行任何的操作,包括获取不存在的属性、方法;也可以给一个any类型的变量赋值任何的值,比如数字、字符串的值;
let name: any = "zhangsan";
a = 100;
a = true;
const list: any[] = ["zhangsan", true, 100]
如果对于某些情况的处理过于繁琐不希望添加规定的类型注解,或者在引入一些第三方库时,缺失了类型注解,这个时候我们可以使用any。不过还是建议在项目中尽量避免使用 any 类型,尽可能的保证代码健壮性。
unknown类型
unknown是TypeScript中比较特殊的一种类型,它用于描述类型不确定的变量
function name(): string {
return "zhangsan"
}
function count(): number {
return 100
}
const flag = true;
let res: unknown;
if (flag) {
res = name();
} else {
res = count();
}
if (typeof res === string){
console.log(res.length)
}
void类型
void通常用来指定一个函数是没有返回值的,那么它的返回值就是void类型。
- null和undefined赋值给void类型,也就是函数可以返回null或者undefined
- 函数如果没有写任何类型,那么它默认返回值的类型就是void的
never类型
never 表示永远不会发生值的类型:如果一个函数中是一个死循环或者抛出一个异常,那这个函数不会返回任何东西,那么写void类型或者其他类型作为返回值类型都不合适,这时候就可以使用never类型
tuple类型
tuple和数组的区别:
-
数组中通常建议存放相同类型的元素,不同类型的元素是不推荐放在数组中。(可以放在对象或者元组中)
-
元组中每个元素都有自己特性的类型,根据索引值获取到的值可以确定对应的类型;
let countList: number[] = [1, 2, 3, 4];
//数组的项中不允许出现其他的类型:
//数组的一些方法的参数也会根据数组在定义时约定的类型进行限制:
countList.push(3);
countList.push('abc'); // 报错
// 元祖的表示和数组非常类似,只不过它将类型写在了里面 这就对每一项起到了限定的作用
let list: [string, number] = ['zhangsan', 20];
let name = list[0];//zhangsan 且知道是string类型
//当我们写少一项,就会报错,同样写多一项也会有问题
list = ['zhangsan', 20, true]