TS

作者: shaokang 时间: February 23, 2022字数:714

枚举和常量枚举的区别

// 枚举
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 要使用类型断言才能赋值给其他类型。