枚举和常量枚举的区别
// 枚举
enum Color { Red, Green, Blue }
// 常量枚举
const enum Color { Red, Green, Blue }
枚举会被编译时会编译成一个对象,可以被当作对象使用,编译如下
var Color;
(function (Color) {
Color[(Color['Red'] = 0)] = 'Red';
Color[(Color['Green'] = 1)] = 'Green';
Color[(Color['Blue'] = 2)] = 'Blue';
})(Color || (Color = {}));
var sisterAn = Color.Red;
const 枚举会在 typescript 编译期间被删除,const 枚举成员在使用的地方会被内联进来,避免额外的性能开销
var sisterAn = 0; /* Color.Red */
type 和 interface 的区别
相同点:
- 都可以描述一个对象或函数
- 都可以扩展 不同点:
- type 可以描述基本类型、联合类型、元组等,interface 只能描述对象
- type 可以使用 typeof 获取实例的类型,interface 不行
- interface 可以声明合并,type 不能
- interface 可以继承接口,type 不能
any 和 unknown 的区别
any 类型表示任意类型,unknown 表示未知类型,any 和 unknown 都可以赋值给任意类型。 any 会忽略类型检查,unknown 不会。unknown 要使用类型断言才能赋值给其他类型。