ts语法(二)

110 阅读3分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 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]