Skip to content

基本数据类型

TypeScript 支持与 JavaScript 几乎相同的数据类型,此外还提供了实用的枚举类型方便我们使用

类型描述
boolean限制为布尔类型, true 或者 false
number限制为任意的数字。 二进制,八进制,十进制,十六进制均可
string限制为任意的字符串。单引号,双引号,反引号均可
字面量限制为某个字面量
any限制为任意类型
void限制为 undefined, 一般用来限制函数的返回值
object限制为对象类型
array限制为数组类型 string[] Array<number>
tuple 元组限制为固定长度与类型的数组
enum 枚举限制为枚举的数据

布尔

最基本的数据类型就是简单的 true/false 值,在JavaScript 和 TypeScript 里叫做 boolean(其它语言中也一样)

js
let b1:boolean = true;
b1 = false;
// b1 = 123; // 报错:不能将类型“number”分配给类型“boolean”

number

除了支持十进制和十六进制字面量,也支持二进制和八进制字面量

js
let num1:number = 123;
num1 = 1.3;
num1 = -20;
num1 = 0;
num1 = NaN;
// num1 = 'abc'; // 报错: 不能将类型“string”分配给类型“number”

let a1: number = 10 // 十进制
let a2: number = 0b1010  // 二进制
let a3: number = 0o12 // 八进制
let a4: number = 0xa // 十六进制

string

JavaScript 程序的另一项基本操作是处理网页或服务器端的文本数据。 像其它语言里一样,我们使用 string 表示文本数据类型。 和 JavaScript 一样,可以使用双引号(")或单引号(')表示字符串。

js
let str:string = 'abc';
str = 'zyx'
// str = 123; // 报错:不能将类型“number”分配给类型“string”。

object

引用类型:数组,函数,对象都为object类型

js
let obj1:object = {name:'atguigu', age:20};
obj1 = [1,2,3];
obj1 = function(){
    console.log(123);
}

字面量类型

TS 允许限制某个变量为固定的某个值

js
let z: 521 = 521;
let z2: 'love' = 'love';
// z='abc'; //类型不符 error

数组

TypeScript 像 JavaScript 一样可以操作数组元素。 不过数组中元素值的类型都是一样的

有两种方式可以定义数组。

第一种,可以在元素类型后面接上[],表示由此类型元素组成的一个数组

第二种, 方式是使用数组泛型,Array<元素类型>
js
let arr: number[] = [1,2,3];
// arr.push('abc');// error
let arr2: Array<number> = [4,5,6];

let arr3:string[] = ['1','2','3']
let arr4:Array<string> = ['a','b','c']

any

any 类型允许变量的值为任意类型, 并且可以进行任意类型的赋值

js
let a:any = 123;
a = 'abc';
a = true;
a = [1,2,3];

尽量不要用 any, 因为对于 any 类型 typeScript 会关闭类型检查功能

void

void 表示空的, 该类型主要用在函数返回值上

js
// 限制为 undefined, 一般用来限制函数的返回值

function fn(a:number,b:number):void{
    console.log(a,b);
}

tuple

元组:元组就是一个特殊的数组,长度以及数组每一个元素的类型已经确定了

js
let t1: [string, number] = ['james', 30];
console.log(t1[0].toUpperCase());

let t1:[number, string] = [10,'jame'];

enum

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

一般用于组织一些有相似之处的常量,让这些常量更规范、更统一

js
enum Gender {
    Female, // 默认为0
    Male,   // 依次往下排序
    Secret=100,
    unknown // 从100依次往下排序
}

let me: object = {
    gender: Gender.unknown,
}

console.log(me); // {gender:101}

联合类型

联合类型(Union Types)表示取值可以为多种类型中的一种

js
let v1: number | string;
v1 = 5211314;
v1 = 'iloveyou'

⚠️联合类型在使用时需要注意

js
function getX(x:number|string){
    console.log(x.toString());// 联合类型必须使用都有的属性,才不会报错
    // 使用一个有,其他没有的会报错,怎么解决呢? 使用类型断言

    if((x as string).length){ // 说明是字符串

    }else{// 说明是数字

    }
}
// x = true; // 报错: 不能将类型“boolean”分配给类型“string | number”

类型断言

类型断言(Type Assertion)可以告诉编译器,“相信我,我知道自己在干什么,别报错,出了事我负责”

js
let root = document.querySelector('#root') as HTMLElement;
root.querySelector('span');

类型推断

TS 会在没有明确的指定类型的时候推测出一个类型

js
1. 变量声明时赋值了,推断为值对应的类型
2. 变量声明时没有赋值, 推断为 any 类型
js
// 类型推断: 如果不指定类型,那么首次赋值的类型就是该变量的类型
let num99 = 123;
// num99 = 'abc';// 报错:不能将类型“string”分配给类型“number”

运算符

!!代表将数据强制转换为布尔类型

ts
!!'haha' == true