TypeScript
TS 和 JS 的区别是什么?有什么优势?
- 语法层面:TypeScript = JavaScript + Type(TS 是 JS 的超集)
- 执行环境层面:浏览器、Node.js 可以直接执行 JS,但不能执行 TS(Deno 可以执行 TS)
- 编译层面:TS 有编译阶段,JS 没有编译阶段(只有转译阶段和 lint 阶段)
- 编写层面:TS 更难写一点,但是类型更安全
- 文档层面:TS 的代码写出来就是文档,IDE 可以完美提示。JS 的提示主要靠 TS
any、unknown、never 的区别是什么?
any V.S. unknown
- 二者都是顶级类型(top type),任何类型的值都可以赋值给顶级类型变量
- 但是 unknown 比 any 的类型检查更严格,any 什么检查都不做,unknown 要求先收窄类型
- 如果改成 any,基本在哪都不报错。所以能用 unknown 就优先用 unknown,类型更安全一点。
never
never 是底类型,表示不应该出现的类型
type 和 interface 的区别是什么?
- 组合方式:interface 使用 extends 来实现继承,type 使用 & 来实现联合类型。
- 扩展方式:interface 可以重复声明用来扩展,type 一个类型只能声明一次
- 范围不同:type 适用于基本类型,interface 一般不行。
- 命名方式:interface 会创建新的类型名,type 只是创建类型别名,并没有新创建类型。
TS 工具类型 Partial、Required、Readonly、Exclude、Extract、Omit、ReturnType 的作用和实现?
- Partial 部分类型
- Required 必填类型
- Readonly 只读类型
- Exclude 排除类型
- Extract 提取类型
- Pick/Omit 排除 key 类型
- ReturnType 返回值类型