TypeScript 是 JavaScript 的超集,用于类型检查,在编译阶段提前发现错误,提升开发效率和代码安全性
主要是用于解决javaScript类型缺失,容易出错的缺点
这个问题见仁见智,但是我的观点是要用。
综上,AI辅助下使用ts收益远远大于成本,必须要用上!
声明变量的时候,直接赋值,会根据赋值的类型推导出标识符的类型注解,称为类型推导
let 声明的变量类型推导会是通用类型const 声明的变量类型推导,推导出来的是字面量类型ts会自动推断变量的类型,如果声明时没有赋值或声明类型,不管之后有没有赋值,都会被推断成 any 类型,从而编译报错
ts中有一些预先定义的类型,可以直接使用, 如 Iterable 可迭代类型
number和Number的区别
number ,ts中的number类型,js中不存在
Number是一个js中的类,是用来创建Number实例的,ts中也可以用
void类型的变量只能赋值为undefined和null以及没有返回值的函数类的特性: 封装、继承、多态
js/ts中是单继承,只能继承单一父类成员修饰符,控制属性的访问权限
public 可公开访问 【default】private 私有属性,只能在定义它的类内部访问,子类和实例都无法访问protected 保护属性,可以在定义它的类内部和子类内部访问,但实例无法访问readonly 只能在声明时或构造函数里被初始化,其他地方不能修改static 静态属性,类可以访问,实例不能访问当构造函数修饰为 protected 时,该类只允许被继承
当构造函数修饰为 private 时,该类不允许被继承或者实例化 【单例模式】
抽象类的作用,多用于多态的实现,分层封装
访问器是一种特殊的方法,用来读取或设置某个属性的值
在constructor方法中,参数前面加上修饰符,即可简化属性的编写
主要用于声明对象类型,接口中的属性和方法都是抽象的,不能有具体实现
| 特性 | 继承接口 | 定义多个相同 | 实现接口 | 定义函数类型 | 声明基本类型 |
|---|---|---|---|---|---|
| type | ✅ | ❎ | ✅ | ✅ | ✅ |
| interface | ✅ | ✅ 内容会合并 | ✅ | ✅ | ❎ |
建议基本类型使用type,对象类型使用interface
泛型是指在定义函数、接口或类的时候,不预先指定具体的类型,使用一个变量代替,而在使用的时候再指定类型的一种特性
泛型的思想可以理解为把类型抽象成一个变量,在定义函数或者类的时候,传入类型的形参,使用的时候传入或根据参数推导具体的类型

泛型的类型限制是通过接口的继承实现的
缩小类型的范围,从而可以使用特定类型的方法
一个对象看起来像鸭子,叫声像鸭子,行为像鸭子,那么可以认为它是一个鸭子
ts中的类型检测使用的鸭子类型
鸭子类型是一种动态类型的概念,它是指在运行时,一个对象的有效语义是由它当前方法和属性的集合决定的,而不是由它所继承的特定类或接口的集合决定的。
这意味着,只要一个对象具有与所需方法和属性相同的方法和属性,它就可以被视为是所需的类型。这种类型检查方式通常用于动态语言中,如JavaScript和Python
对象和接口中的属性都可以使用的修饰符
?. 可选Readonly 只读相当于一个动态属性
严格对象字面量赋值 在使用字面量对接口或者类型赋值时,直接赋值会严格校验字面量的属性必须和接口保持一致,如下例子
export {}使用type关键词的好处,使用babel、esbuild等编译时,方便识别安全移除,提升效率
.d.ts文件,主要用于类型声明,不写代码逻辑,主要类型
作为一个缩小类型范围的手段
不同类型的对象共享相同的基础属性,但能根据自己的类型拥有私有属性
交叉类型是将多个类型合并为一个类型。这意味着你可以将多个类型的属性合并到一个类型中。
例如:
在这个例子中,MyObject 包含了 CommonProps 中的属性以及 TypeA 或 TypeB 中的属性。这样,无论对象是 TypeA 还是 TypeB,它都会有一个 commonProp 属性。