文章目录
TS和 JS一样,将所有的数据类型分为“基本数据类型”和“引用数据类型”。
一、基本数据类型
number
string
boolean
null
undefined
symbol
bigint
1.1 基本类型
创建变量时,var、let、const 都是和 JS 的使用方式一样,但是需要约束变量的数据类型。
基础语法:var 变量名: 类型 = 值 ;
var a: number = 1;
let b: string = 'typescript';
const c: boolean = true;
const e: undefined = undefined;
const f: null = null;
1.2 void
void
表示没有任何数据类型(或空值 undefined)。
通常,当一个函数没有返回值的时候,会将返回值的类型设置为 void。
function fn(): void { ... };
1.3 never
never
没有值,永远不会返回结果,用来返回错误。
function fn(): never {
throw new Error('报错!')
}
二、特殊数据类型
2.1 any
any
表示任意数据类型。(一般不推荐使用)
let d: any;(显示的any)
//声明变量如果不指定类型,则TS解析器会自动判断变量的类型为any(隐式的any) 。
let d;
d = 10;
d = "hello";
d = true;
//any 类型的变量可以赋值给任意类型的变量。
2.2 unknown
unknown
未知类型的值,类似 any
实际上就是一个类型安全的any,但是不能直接赋值给其他变量。
2.3 数组 array
TS 默认要求数组中的每一项必须是同一个数据类型。
两种写法:
const a: number[];
const b: Array<string>;
在声明时直接赋值
const a: number[] = [1,2,3];
const b: Array<string> = ['1','2','3'];
也可以将数组的类型设置为any
const c: any[] = [1,'2',3];
2.4 元祖 tuple
允许一个数组中保存多个类型的数据。
但是,要求数组中的值与元祖类型必须:数量要一致
位置要对应
类型要对应
。
const a: [number, string] = [18,'zhangsan'];
2.5 对象 object
在TS中定义对象时,要定义出对象中有哪些属性,以及每个属性的值是什么类型。
const user: { _id: number, name: string } = { id: 1, name: 'Li'};
// ? 表示可选属性
const user: { _id: number, name?: string } = { id: 1, name: 'Li'};
// [propName: string]: any 任意可选属性
const user: { _id: number, name: string, [propName: string]: any }
= { id: 1, name: 'Li', age: 18, gender: '男'};
//特殊的 可以赋值一个函数,也不会报错
let a: object;
a:{};
a = function () {};
2.6 枚举 enum
enum
枚举类型用于取值被限定在一定范围内的场景,比如一周只有七天,颜色限定为红绿蓝等。
2.6.1 数字枚举
数字枚举有自增长的行为,可以使用初始器
指定从几开始自增。
(1)不使用初始器
//a 使用默认值为 0,其余成员会从 0 开始自动增长。
enum test {
a, // a = 0
b, // b = 1
c, // c = 2
d, // d = 3
};
Object.values(test).map((item)=>{
console.log(item);
})
(2)使用初始器
//a 使用默认值为 1,其余成员会从 1 开始自动增长。
enum test {
a = 1, // a = 1
b, // b = 2
c, // c = 3
d, // d = 4
};
2.6.2 字符串枚举
字符串枚举没有自增的行为,每个成员必须初始化赋值。
enum test {
a = 'a',
b = 'b',
c = 'c',
d = 'd',
}
2.6.3 异构枚举
混合字符串和数字成员,不推荐使用。
enum test {
Yes = 'Y',
No = 0,
}