二、TS的基础类型、类型注解
TS的基础类型、类型注解
TS的基础类型
js的数据类型:
-
基础数据类型(7个)
boolean string number null undefined BigInt Symbol
-
引用数据类型(1个)
Object
变量后面多了一个注解,注解为变量限定数据类型,TS语法中不同数据的注解方式:
let num: number = 123;
let bool: boolean = false;
let str: string = 'false';let a: null = null;
let b: undefined = undefined;let c: object = {};
let d: symbol = Symbol();
let e: bigint = BigInt(92341341);let f:object = {};let g = function(a:number, b:number): number {return a+b;
}
// 长度不可变,类型确定的数组
let x: [string, number] = ['1', 2];
基础类型注解具体
布尔值
注解为大写Boolean时代表一个接口(interface)。
注解为小写boolean时代表一种数据类型。
let bool1: boolean = false;
let bool2: Boolean = false;
let bool3: boolean = Boolean(0); //显示类型转化
let bool4: boolean = new Boolean(0); //提示错误,包装类不能给boolean类型变量赋值
数字
TS与JS里所有数字都是浮点数,浮点数类型:number,都支持十进制、十六进制数、二进制、八进制字面量。
let decLiteral: number = 6;
let hexLiteral: number = 0xf00d;
let binaryLiteral: number = 0b1010;
let octalLiteral: number = 0o744;let a1: number = -0;
let a2: number = +0;
let a3: number = Infinity;
字符串
TS与JS一样,使用双引号(“ ”)、单引号(‘’)、模板字符串(``)表示string类型。
let name: string = `Gene`;
let age: number = 37;
let sentence: string = `Hello, my name is ${ name }.I'll be ${ age + 1 } years old next month.`;
数组
数组可以通过
-
注解的形式来表示。
-
接口的形式来表示,因为数组是对象。
let list:number[] = [1,2,3]; //数组里面的值是number
let list4: Array<number> = [1,2,3]; //接口:简单理解:这里<number>描述对象的成员的类型let list1:(number | string)[] = [1,2,3, '4']; //联合类型注解:要求数组里面的值是number或string
let list2:number[][] = [[1,2,3]]; //数组嵌套,且内部数组中的元素被要求为number类型
let list3:(number[] | string | number)[] = [[1,2,3], '4', 6]; //要求数组内部的成员为:number类型数组,string值,number值
Any
为那些在编程阶段还不清楚类型的变量指定一个类型(指定为任意类型)。ts类型检查器不会起作用,相当于没有用ts。
let notSure: any = 4;
notSure = '123';
notSure = [];
unknown
安全的未知类型
unknown、any赋任何值都不会报错。但使用时,unknown会报错。
Void
void与any类型相反,不表示任何类型,**只在函数没有返回值时使用。**其他情况基本不用。
function warnUser(): void {console.log("This is my warning message");
}
Null 和 Undefined
除了自己类型外,默认情况下null
和undefined
是所有类型的子类型。
let u: undefined = undefined;
let n: null = null;
let v: void = undefined;
然而,当你指定了
--strictNullChecks
标记,null
和undefined
只能赋值给void
和它们各自。
Never
never
类型表示的是那些永不存在的值的类型。报错、返回错误、无限循环。
// 返回never的函数必须存在无法达到的终点
function error(message: string): never {throw new Error(message);
}// 推断的返回值类型为never
function fail() {return error("Something failed");
}// 返回never的函数必须存在无法达到的终点
function infiniteLoop(): never {while (true) {}
}
Object
object
表示非原始类型,也就是除number
,string
,boolean
,symbol
,null
、undefined
、bigint
之外的类型。
let obj1: object = {a: 1, b: 2};
let obj2: object = new Object();
let obj3: object = new Number();
补充:调出tsconfig.json
tsc -init
bigInt与symbol
- bigint表示大数,在ts中的表现形式:
const bigNumber = BigInt(9007199254740991);
const bigNumber1:bigint = 9007199254740991n;
- Symbol()返回唯一字符串,在对象中可以作为私有属性
const sym1: symbol = Symbol();
const sym2: symbol = Symbol();
console.log(sym1==sym2);//false
//symbol返回唯一字符串,在对象中可以作为私有属性
补充:for of执行的本质就是调用对象上的迭代器方法,按照指定迭代顺序返回结果:
var obj = {[Symbol.iterator]: function*(){yield 1;yield 2;yield 3;yield 4;}
}
for (let i of obj){console.log(i);
}
1
2
3
4