常见基础问题(TS)

217 阅读2分钟

TypeScript 和 JavaScript 的区别是什么?有什么优势?

  1. 编写层面:TS更难写一些,但是类型更安全。
  2. 语法层面:TS=JS+type 。(TS是JS的超集)
  3. 执行环境:浏览器、Node.js可以直接运行JS,但不能运行TS(Deno可以执行TS)。
  4. 编译层面:TS有编译阶段,JS没有,只有转译和lint阶段。
  5. 文档层面:TS的代码写出来就是文档,IDE可以完美提示。JS的提示主要靠TS。

any、unknown、never 的区别是什么?

any vs unknown

  1. 二者都是顶级类型(top type),任何类型的值都可以赋值给顶级类型变量。
  2. 但是unknowany的类型检查更加严格,any什么检查都不做,unknow要求先收窄类型。
const value:unknow = "hello world"
const someString:string = value;//报错,应写作const someString:string = value as string

never

  1. never是底类型,表示不应该出现的类型,可以赋值给任何变量,但不接受被赋值。

type 和 interface 的区别是什么?

  1. 组合方式不同:interface使用extends来实现继承,type使用 & 来实现联合类型。
  2. 扩展方式不同:interface可以重复声明扩展,并自动合并。type一个类型只能声明一次。
  3. 范围不同:type适用于基本变量,interface一般不行。
  4. 命名不同:interface会创建新的类型名,而type只是创建类型名,并没有新创建类型。

TS 工具类型 Partial、Required、Readonly、Exclude、Extract、Omit、ReturnType 的作用和实现?

Partial:部分类型。是某个类型的一部分。 Required:必填类型。全部必填,不可缺少。 Readonly:只读类型。只读,不可更改。 Exclude:排除类型。将某个类型去掉。 Extract:提取类型。 Omit:排除key类型。排除某些特性,原来定义的还在。 pick:只选择某些类型。 ReturnType:返回值类型 。