TypeScript 和 JavaScript 的区别是什么?有什么优势?
- 编写层面:TS更难写一些,但是类型更安全。
- 语法层面:TS=JS+type 。(TS是JS的超集)
- 执行环境:浏览器、Node.js可以直接运行JS,但不能运行TS(Deno可以执行TS)。
- 编译层面:TS有编译阶段,JS没有,只有转译和lint阶段。
- 文档层面:TS的代码写出来就是文档,IDE可以完美提示。JS的提示主要靠TS。
any、unknown、never 的区别是什么?
any vs unknown
- 二者都是顶级类型(top type),任何类型的值都可以赋值给顶级类型变量。
- 但是
unknow比any的类型检查更加严格,any什么检查都不做,unknow要求先收窄类型。
const value:unknow = "hello world"
const someString:string = value;//报错,应写作const someString:string = value as string
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:提取类型。
Omit:排除key类型。排除某些特性,原来定义的还在。
pick:只选择某些类型。
ReturnType:返回值类型 。