类型
一些列值及可以对其执行的操作
eg:boolen类型包含所有的布尔值(true/false),以及可以对布尔值执行的操作(||,!,&&);
any
无法确认类型是什么,默认为any,兜底类型,尽量避免使用。
unknown
与any相似,unknow也表示任何值,但是TS会要求你在做检查
-
ts不会将值推导为unknown类型,需要显示注解
2.unknown类型的值可以比较
3.但是执行操作时候,必须先确定是某一类型值在做校验
let a: unknown = 30;
if (typeof a === "number") { // 必须先细化类型在进行操作
a++;
}
boolean
true/fale
const a = false; // 由TS推导出类型为boolean类型
const b: boolean = true; // 显示注解告诉ts这是一个boolean类型
字面量类型
仅表示一个值的类型叫字面量类型
const a: true = true; // 限制a只能为boolen类型中的true
number
包括所有的数字:整数、浮点数、正数、负数、NaN等等
const a = 123; // TS推导出为number类型
const b: number = 4556; // 显示注解为number类型
const c: 12 = 12; // 字面量类型,一个具体的值
const d: 13 | 14.12 = 13; // 13或者14.12中的一个值
bigint
JS和TS引入的新类型,在处理比较大的整数时候,不用在担心舍入误差。
const a: bigint = 100n;
1.number表示的最大整数为 2 53 2^{53} 253,而bigint可以表示比这更大的数
- 不是所有的JS引擎都支持bigint
string
包含所有字符串,以及可以对字符串执行的操作
symbol
唯一,不与其他任何符号相等,常用于代替对象和映射的字符串键,确保使用正确的已知键。
let a = Symbol("a");
let b: symbol = Symbol("b");
unique symbol类型
使用const 定义得symbol类型,唯一且不可修改。所以如果显视定义unique symbol类型必须使用const
const e = Symbol("e"); // TS推导为unique symbol类型
const f: unique symbol = Symbol("f"); // 显视定义必须为const
对象
声明方式
-
声明为object类型object类型object类型
object类型只能表示他是一个JS对象,并且不是null,并不能明确告知TS里面存在得属性const a:object={ b:'x' } console.log(a.b)// 会报错,原因就是bject类型只能表示他是一个JS对象,并且不是null,并不能明确告知TS里面存在得属性
2.对象字面量句法(由TS自动推导出类型结构)
let a = { name: "123", // ts将推导出类型为{name:string1} };
3.显式表示对象类型结构(明确类型结构在赋值)
let a: {
name: string;
} = {
name: "123",
};
4.使用空对象类型{},除null和undefined之外的任何类型都可以赋值给空对象类型==(尽量避免使用)==
let danger:{}
danger=123;
danger=[];
-
使用Object定义对象==(尽量避免使用)==
Object定义的类型必须颗赋值给Object原型内置类型
let danger: {}; danger = 123; danger = []; let b: Object = { toString() { return "13"; }, }; let c: Object = { toString() { return "13"; }, sayName(){ return 123 } }; c.toString()// 13 c.sayName() // 报错因为sayName不属于原型方法
如果对象可能缺少某个属性,使用?表示该属性可能不存在
可以给该类型赋值undefined,(JS对象属性值不存在就是undefined)
let a: {
name: string;
age?:number
} = {
name: "123",
};
动态属性(使用索引签名表示可能会有更多得键)
let a: {
[statNumber: string]: string;
} = {
name: "123",
};
a.age="456"; // 动态添加属性
索引签名优先级,索引属性string的优先级最高
[index:number]最终也会转换为[index:string]
let a: {
[statNumber: string]: string;
[key: number]: boolean; // 报错“number”索引类型“boolean”不能分配给“string”索引类型“string”,因为string级别最高而且number会转换为string,所以不行
} = {
name: "123",
};
参考文档:https://www.codenong.com/cs106925087/