TS学习的24个基础概念

69 阅读2分钟
  1. 假设有一个值 TypeScript 认为可以为 null 或 undefined ,但是你更清楚它的类型,你可以使用 ! 后缀.

    declare var foo: string[] | null;

    foo.length;  // error - 'foo' is possibly 'null'

    foo!.length; // okay - 'foo!' just has type 'string[]'


  2. this 没有隐式的 any, 可以通过设置noImplicitThis限制

  3. 浮点数的类型是 number , 而大整数的类型则是 bigint

  4. 数组泛型, Array<元素类型>

  5. unknown 类型(之前没有)

  6. TypeScript 具有 ReadonlyArray<T> 类型,它与 Array<T> 相似,只是把所有可变方法去掉了

  7. 带有任意数量的其它属性,那么我们可以这样定义它:[propName: string]: any;

  8. 可索引类型:[index: number]: string;

  9. 类使用接口:class Clock implements ClockInterface

  10. 当你操作类和接口的时候,你要知道类是具有两个类型的:静态部分的类型和实例的类型;当一个类实现了一个接口时,只对其实例部分进行类型检查。 constructor 存在于类的静态部分,所以不在检查的范围内,需要为静态部分另外写接口

  11. 字面量类型: TypeScript 中有三种可用的字面量类型集合,分别是:字符串、数字和布尔值。通过使用字面量类型,你可以规定一个字符串、数字或布尔值必须含有的确定值, 例如: type a = 1|2|3

  12. interface和type的区别: [type 与 interface 的区别,你真的懂了吗? - 掘金 (juejin.cn)](<https://juejin.cn/post/7072945053936648200>)

  13. 抽象类做为其它派生类的基类使用。 它们一般不会直接被实例化

  14. 类的类型是构建函数的类型

  15. 泛型约束: extends\extends keyof

  16. is 关键字一般用于函数返回值类型中,判断参数是否属于某一类型,并根据结果返回对应的布尔类型

  17. 工具类型: [实用工具类型 | TypeScript手册 (bosens-china.github.io)](<https://bosens-china.github.io/Typescript-manual/download/zh/reference/utility-types.html#%E7%9B%AE%E5%BD%95>)

  18. 装饰器–实验性

  19. 模块的声明: 模块 | TypeScript手册 (bosens-china.github.io)

  20. 需要根据不同的形式,写d.ts文件,如npm包,umd库

  21. 在一个.d.ts文件中引入了其他模块,就会使ts类型系统将其视为一个模块,导致其中的所有类型即使添加了declare关键字也不能直接全局使用,修复

    import { RawDraftContentState } from 'draft-js';

    declare global {

    interface FieldConfigDataIte {

    data: RawDraftContentState

    }

    }

  22. 强制类型转换有两种方法

    // 第一种:使用<>括号
    const convertArrType: string[] = <Array<string>>[].concat(['s']);
    
    // 第二种:使用as关键字
    const fixArrNever: string[] = ([] as string[]).concat(['s']);
    

  23. 枚举可以当类型使用, 类似枚举类型TS学习笔记6:枚举作为类型使用 - 掘金 (juejin.cn)

  24. ?? Null运算符,只有左侧为undefine或者null才返回右侧的值