1.TS和JS的区别
ts 是js的超集。
- 从执行环境上来看,浏览器、node.js 可以直接执行js,但不能执行ts;
- 编译层面,Ts 有编译阶段,js 没有,只有转译阶段和lint阶段;
- ts更难写一点,但类型更安全。
- ts 代码写出来就是文档,IDE可以完美提示,js本身是没有区别的。
2. any/ never/unknow的区别
any 和 unknown是顶级类型,never 是底类型。前者可以被赋值为任何类型,后者不能
用法区别:unknown 比any 的类型检查更严格。
3. type 和interface 的区别?
假设type和interface都能用的情况下,你会用哪个?
对象相关用interface,与对象不相关用type。
- 组合方式:interface 搭配extends来实现继承,type 使用& 来实现联合类型;
- 扩展方式:interface 可以重复声明用来扩展,type一个类型只能声明一次;
- 范围不同:type 适用于基本类型,interface 一般不行;
- 命名方式:interface 会创建新的类型名,type 只是创建类型别名,没有创建新的。例如:
4. 工具类型的作用和实现
Partial 是部分类型,Required 是必填类型,Readonly 只读类型,Exclude 排除类型,Extract 提取类型,Omit 排除key类型,ReturnType 返回值类型。
type Dir='东'|'西'|'南'|'北' type Dir2=Exclude<Dir,'北'> //Dir2='东'|'南'|'西' type Dir3=Extract<Dir,'北'> //Dir3='北'
ps:Exclude 用于基本类型,Omit 用于对象类型。