# TS、JS 区别
- 语法层面:TypeScript = JavaScript + Type(TS 是 JS 的超集)
- 执行环境层面:浏览器、Node.js 可以直接执行 JS,但不能执行 TS(Deno 可以 执行 TS)
- 编译层面:TS 有编译阶段,JS 没有编译阶段(只有转译阶段和 lint 阶段)
- 编写层面:TS 更难写一点,但是类型更安全
- 文档层面:TS 的代码写出来就是文档,IDE 可以完美提示
# any、unknown、never 区别
# any V.S. unknown
二者都是顶级类型(top type),任何类型的值都可以赋值给顶级类型变量:
let foo: any = 123; // 不报错
let bar: unknown = 123; // 不报错
但是 unknown 比 any 的类型检查更严格,any 什么检查都不做,unknown 要求先收窄类型:
const value: unknown = "Hello World";
const someString: string = value;
// 报错:Type 'unknown' is not assignable to type 'string'.(2322)
const value: unknown = "Hello World";
const someString: string = value as string; // 不报错
如果改成 any,基本在哪都不报错。所以能用 unknown 就优先用 unknown,类型更 安全一点。
# never
never 是底类型,表示不应该出现的类型
# type、 interface 区别
- 组合方式:interface 使用 extends 来实现继承,type 使用 & 来实现联合类型。
- 扩展方式:interface 可以重复声明用来扩展,type 一个类型只能声明一次
- 范围不同:type 适用于基本类型,interface 一般不行。
- 命名方式:interface 会创建新的类型名,type 只是创建类型别名,并没有新创建 类型。
← HTML、CSS、DOM Webpack →