TypeScript 系列
TypeScript 中 const 和 readonly 的区别?枚举和常量枚举的区别?
const 和 readonly 的区别
- const 用于
变量
, readonly 用于属性
- const 在
运行时检查
, readonly 在编译时检查
- const 一旦声明变量,就必须立即初始化
- const 保证的是变量指向的那个内存地址不得改动,例如使用 const 变量保存的数组,可以使用 push,pop 等方法。但是如果使用
ReadonlyArray<number>
声明的数组不能使用 push ,pop 等方法
- const 用于
枚举和常量枚举的区别
- 枚举会被编译时会
编译成一个对象
,可以被当作对象使用 - const 枚举会在 typescript 编译期间被删除,生成的 JavaScript 文件中不会存在枚举类型,所有的
枚举成员都会被替换为它们的实际值
(常量枚举 会有更好的性能)
- 枚举会被编译时会
TypeScript 中 any、unknown 有什么区别?
- 相同点:可以为 any, unknown 类型变量分配任何值
- 不同点:使用 unknown 变量时,TypeScript 会强制执行类型检查
对 TypeScript 类中成员的 public、private、protected、readonly 修饰符的理解?
public
: 成员都默认为 public,被此限定符修饰的成员是可以被外部访问;private
: 被此限定符修饰的成员是只可以被类的内部访问;protected
: 被此限定符修饰的成员是只可以被类的内部以及类的子类访问;readonly
: 关键字将属性设置为只读的。 只读属性必须在声明时或构造函数里被初始化。
TypeScript 的类型工具?
Exclude<T, K>
: 用来从联合类型 T 里面,删除某些类型 KExtract<T, K>
: 用来从联合类型 T 之中,提取指定类型 KOmit<Type, Keys>
: 用来从对象类型 Type 中,删除指定的属性 KeysPick<Type, Keys>
: 用来从对象类型 Type 中,选定指定的属性 KeysPartial<Type>
: 将参数类型 Type 的所有属性变为可选属性Required<Type>
: 将参数类型 Type 的所有属性变为必选属
TypeScript 中 type 和 interface 的区别?
相同点:
- 都可以描述 '对象' 或者 '函数'
- 都允许拓展(extends)
不同点:
- type 可以声明基本类型,联合类型,元组
- type 可以使用 typeof 获取实例的类型进行赋值
- 多个相同的 interface 声明可以自动合并