type 和 interface 的区别

  • 相同点
    • 都可以描述一个对象或是一个函数
    • interface可以扩展(extend),但是type不允许扩展,但是type可以通过交叉类型来实现interface的extends行为,也就是interface可以继承type,type 可以交叉interface。
  • 不同点
    • type可以声明本类型别名,联合类型,元组等类型
    • type语句中还可以使用 typeof 获取实例的 类型进行赋值
    • interface声明可以合并,type重名会报错
    • interface可以被派生类实现 type不可以被实现
  • 总结
    • interface是接口,type是类型,本身就是两个概念。只是碰巧表现上比较相似。

希望定义一个变量类型,就用type,如果希望是能够继承并约束的,就用interface。
如果你不知道该用哪个,说明你只是想定义一个类型而非接口,所以应该用type。

const和readonly的区别

  1. const用于变量,readonly用于属性
  2. const在运行时检查,readonly在编译时检查
  3. 使用const声明的数组可以使用pop、push等方法。但是如果使用readonly声明的数组不能使用这些方法。

never和void的区别

  • never表示永远不存在的类型,比如一个函数永远抛出错误不会返回值或者内部有死循环不会返回值。
  • void 没有显示的返回值的函数。如果一个变量为void只能赋予undefined或者null。

unknow和any的区别

unknow和any类型相似,unknow可以接受任何类型赋值,但是unknow在赋值给其他类型前必须断言,更加严格

枚举和Object的区别

  1. 枚举的键值是双向的
  2. Obkect只能通过key拿到value
  3. 数组枚举在不确定初始值的情况下会从0可以递增
  4. 虽然枚举是一个真实的对象。但使用keyof行为和对象不一样,必须使用keyof typeof才能获取枚举的属性名。

    implements和extends的区别

  • extends子类会继承父类的所有属性和方法
  • implements将需要实现需要实现类的所有属性和方法

    枚举和常量枚举的区别

  1. 枚举会被编译时编译成对象
  2. const枚举会在ts编译期间被删除

ts如何枚举联合类型key

  1. type Age={age:number}
  2. type Name={name:string}
  3. type Union = Name | Age
  4. type UnionKey<P> = P extends infer P ? keyof P : never
  5. type T = UnionKey<Union>

ts中?. ?? !. - ** -? -readonly的意义

  • ?. 可选链
  • ?? 表示过滤一些0,””,NaN,false被判断为false的情况,只有在undefined和null视为false
  • !. 可以断言排除undefined和null类型
    • 声明改函数将被传递一个参数,但你并不关心他
  • ** 求幂
  • !: 待会会分配这个变量
  • -? 删除修饰符
    • readonly 删除修饰符

      ts如何自动生成库包的声明文件

      可以配置tsconfig.json文件中的declaration和outDir
  1. declaration: true, 将会自动生成声明文件
  2. outDir: ‘’, 指定目录

ts里的this和js里的this区别

ts对象展开的副作用

展示属性仅包含对象 自身的可枚举属性,会丢失方法。

TypeScript 中如何设置模块导入的路径别名?

TypeScript 的 tsconfig.json 中有哪些配置项信息?

如何使 TypeScript 项目引入并识别编译为 JavaScript 的 npm 库包?