TypeScript:数据类型(2)

复杂基础类型

1.array(数组):简单来说就是存一组数字。

数组有两种定义方式分别是直接定义和数组泛型。

直接定义:使用数据类型[]即可,如number[],推荐使用这种写法。

数组泛型:使用Array<数组类型>定义数组,但这种写法会与JSX语法冲突,不推荐这种写法。

let list1: number[] = [1, 2, 3];//直接定义

let list2: Array<number> = [1, 2, 3];//数组泛型

2.object:object是引用类型,他存储的是值的引用,当想让一个变量或函数的参数是一个对象时,可以使用这个类型。(关于对象和引用类型将会在下一篇文章中讲解)

let obj: object

obj = { name: 'TypeScript' }

obj = 123 // 错误 不能将类型“123”分配给类型“object”

console.log(obj.name) // 错误 类型“object”上不存在属性“name”

对象类型更适合以下场景

function getKeys (obj: object) {

return Object.keys(obj) // 会以列表的形式返回obj中的值

}

getKeys({ a: 'a' }) // ['a']

getKeys(123) // error 类型“123”的参数不能赋给类型“object”的参数

3.元组:元组可以看作是数组的拓展,它可以存储元素数量已知,同时每个元素的类型也已知的一组数据

let arr: [string, number, boolean];

arr = ["a", 2, false]; // success

arr = [2, "a", false]; // error 不能将类型“number”分配给类型“string”。不能将类型“string”分配给类型“number”。

arr = ["a", 2]; // error Property '2' is missing in type '[string, number]' but required in type '[string, number, boolean]'

arr[1] = 996

以上代码可以看到给元组赋值的时候既不能少也不能多,同时每个位置上的数据的数据类型也要匹配

4.枚举:枚举类似于选择题,规定了选择的范围,如一周七天,一年四季等都适合用枚举存储,

enum Season {

Spring = "春",

Summer = "夏",

Autumn = "秋",

Winter = "冬"

}

const season = Season.Spring;

console.log(season); // 春

console.log(Season.Summer) // 夏

console.log(Season.Monday) //错误,Season中不存在Monday

以上代码可以看出只能选择枚举类中有的属性,选择没有的属性编译时就会报错

5.any:any可以赋值任意类型,一般在不知道变量会使用什么类型时使用,但一定要少用

let value: any;

value = 123;

value = "abc";

value = false;

const array: any[] = [1, "a", true];

以上代码可以看出any可以存储任意类型的数据,any类型的数组也可以存储任意类型的数据。

6.void:void和any刚好相反,any是什么类型都能往里装,void则是除了undefined 和 null什么都不能往里装。一般用在定义了一个函数但不需要返回任何值的时候时候使用。

const consoleText = (text: string): void => {

console.log(text);

};

7.never:never是指永远不存在的值,一般用在抛出异常的时候,抛出异常之后程序就会停止运行,停止运行之后也就永远不会有任何的值会返回。由于never是所有类型的子类型,同时never没有任何子类型所以never除了本身以外不能被赋予任何类型,因此如果想把某个属性设置为只读,可以给该属性设置为never类型。

const props: {

id: number,

name?: never

} = {

id: 1

}

props.name = null; // error

props.name = 'str'; // error

props.name = 1; // error

给name赋值任何属性都会报错,在一定程度上name属性便成为了只读属性

8.unknown:unknown和any的作用类似,但unknown更安全。在遇到不确定使用什么类型的值的时候,尽量使用unknown。

在使用nuknown时需要注意的几个点:

unknown 不可以赋值给其它类型,只能赋值给 unknown 和 any 类型:

let value2: unknown;

let value3: string = value2; // error 不能将类型“unknown”分配给类型“string”

unknown 类型的值不能进行任何操作:

let value4: unknown;

value4 += 1; // error 对象的类型为 "unknown"

只能对 unknown 进行等或不等操作,不能进行其它操作:

value1 === value2;

value1 !== value2;

value1 += value2; // error

unknown 类型的值不能访问其属性、作为函数调用和作为类创建实例:

let value5: unknown;

value5.age; // error

value5(); // error

new value5(); // error

以上为复杂基础类型,希望各位大佬指正文章中出现的错误和缺少的细节

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值