基本数据类型
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