一 TypeScript基本概念定义:TypeScript核心原则之一是对值所具有的结构进行类型检查。
泛型:是指在函数,接口,类定义时不指名具体某种类型,在运行时指定特定类型的一种特性。
enum枚举:表示一个命名元素的集合。
二 元组与数组区别:
在所有的数据类型里,Array
是唯一的泛型类型,也是唯一有两种不同的写法:Array<T>
和T[]
。
元组的长度是固定已知的。因此使用场景也非常明确,适合用在有固定的标准/参数/配置的地方,比如经纬度坐标、屏幕分辨率等。
三 交叉类型与联合类型:ts联合类型与交叉类型
1 交叉类型(并集,用&
相连):当我们使用交叉类型读取属性,可以获取所有类型的任一属性名,赋值的时候需要满足所有类型的结构。注意:当我们交叉的类型中含有相同属性名但属性类型不一样的情况,该属性会成为never类型。
interface A { name: string age: number } interface B { name: number id: string } type Intersection = A & B; const c: Intersection = {} as any; c.age = 10; // 正确 c.name = '1' // 不能将类型“"1"”分配给类型“never”
2 联合类型(合集,用|
相连):当我们使用联合类型读取属性的时候,只能获取其共同的属性名;
interface A { name: string age: number } interface B { name: number id: string } type Union = A | B; const c: Union = {} as any; c.name // 正确 c.age // 类型“Union”上不存在属性“age”
3 类型保护:
常用的类型保护有typeof
类型保护,instanceof
类型保护和自定义
类型保护
1 function BuildURL(param: string | number): any {
2 if (typeof param === 'string') {
3 return param.toUpperCase()
4 }
5 }
由于使用了typeof
类型保护,所以在if的分支里可以告诉编译器放心的调用string类型的方法,编译器也会给出自动提示
四 类型别名Type: 类型别名会给一个类型起个新名字,多用于复合类型。
type strType = string | number | boolean; let str2: strType = "10"; str2 = 10; str2 = true; interface muchType1 { name: string } interface muchType2 { age: number } type muchType = muchType1 | muchType2 let obj: muchType = { name: "张三" } let obj2: muchType = { age: 10 } let obj4: muchType = { name: "张三", age: 10 }
五 interface(接口)与Type(类型别名)区别:https://juejin.cn/post/6844903749501059085#heading-11
接口:是在我们的应用程序中充当契约的结构。它定义了要遵循的类的语法,这意味着实现接口的类必须实现它的所有成员。
相同点:1都可以描述一个对象或者函数 2 都允许拓展(extends)
区别: type可以而interface不可以:
- type 可以声明基本类型别名,联合类型,元组等类型
- type 语句中还可以使用 typeof 获取实例的 类型进行赋值
interface 能够声明合并
1 interface User {
2 name: string
3 age: number
4 }
5
6 interface User {
7 sex: string
8 }
9
10 /*
11 User 接口为 {
12 name: string
13 age: number
14 sex: string
15 }
16 */