类型声明

  • 类型声明是TS非常重要的一个特点。

  • 通过类型声明可以指定TS中变量(参数、形参)的类型。

  • 指定类型后,当为变量赋值时,TS编译器会自动检查是否复核类型声明,复核则赋值,否则报错。

  • 简而言之,类型声明给变量设置了类型,使得变量只能存储某种类型的值。

  • 语法:

    1
    2
    3
    4
    5
    6
    7
    let 变量: 类型;

    let 变量: 类型 = 值;

    function fn(参数: 类型, 参数: 类型): 类型{
    ...
    }

基本类型

1、字符串: string

1
let str:string = 'hello word'

2、布尔值: boolean

1
let isShow:boolean = true

3、数字: number

1
let age: number = 23;

4、数组: array

1
let list: number[] = [1, 2, 3];

5、元组: tuple

元组类型允许表示一个已知元素数量和类型的数组,各元素的类型不必相同, 对应位置的类型需要相同。

1
2
3
4
5
let arr: [string, number];

arr = ["aaa", 12]; // Ok

arr = [12, "222"]; // Error

6、枚举: enum

JavaScript标准数据类型的一个补充,使用枚举类型可以为一组数值赋予友好的名字。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
enum weeks {

Mon,

Tue,

Wed,

}

let day: weeks = weeks.Mon;

console.log(day); // 0

console.log(weeks[0]); // Mon

console.log(weeks["Mon"]); // 0

7、any unknown

any, 为不清楚类型的变量指定一个类型, 不通过类型检查器检测。

1
2
3
4
5
let x: any = "aaa";

x = 12;

x = false;

unknownany不同的地方在于:

unknown只能赋值给自身或者any

unknown没有办法读任何属性,方法也不可以调用

所以unknownany 更加安全,当不知道类型的时候更推荐定义为unknown

8、void

void类型像是与any类型相反,表示没有任何类型。当一个函数没有返回值时,其返回值类型通常是 void

1
2
3
4
5
function hello(): void {

console.log("11111");

}

xxxxxxxxxx function createArray(length: number, value: T): Array { let result: T[] = []; for (let i = 0; i < length; i++) { result[i] = value; } return result;}typescript

1
let unusable: void = undefined;

9、undefined null

1
let x1: undefined;

10、object

1
let obj: object = { a: "1" };

objectObject以及{}这三个类型的区别:

object类型可以用来声明引用数据类型,例如数组([])、对象({})、函数(function),不能用来声明基础数据类型,如stringnumber等。

Object{}可以用来声明任意数据类型,包括基础数据类型和引用数据类型,但赋值后的数据不能进行修改。

联合类型

1
2
3
4
5
let x2: number | string | boolean;

x2 = 2;

x2 = "22";

类型推论

1
2
3
let x3 = 3; // 推论x3为number类型

let x4;

类型断言

语法:值 as 类型(value as string)  或 <类型>值(value)。

需要注意的是,类型断言只能够「欺骗」TypeScript 编译器,无法避免运行时的错误,反而滥用类型断言可能会导致运行时错误。

类型断言虽然可以通过编译,但是并没有什么用 并不会影响结果, 因为编译过程中会删除类型。

1
2
3
4
5
let x5: number | string | boolean = "this is a string";
// 尖括号方法
let strLen: number = (<string>x5).length;
// as语法
let strLen1: number = (x5 as string).length;

*注:可凭个人喜好用以上方法,但当你在TypeScript里使用JSX时,只有as语法断言是被允许的。