必备增强类型系统的方式大盘点 - 图1

需要注意:使用 declare关键字时,我们不需要编写声明的变量、函数、类的具体实现(因为变量、函数、类在其他库中已经实现了),只需要声明其类型即可

declare 变量

  1. declare var val1: string;
  2. declare let val2: number;
  3. declare const val3: boolean;

declare 函数

  1. delare function toString(x: number) => number

declare 类

  1. declare class Person {
  2. public name: string;
  3. private age: number;
  4. constructor(name: string);
  5. getAge(): number;
  6. }

declare 枚举

注意:声明枚举仅用于编译时的检查,编译完成后,声明文件中的内容在编译结果中会被删除, 相当于仅剩下面使用的语句:

  1. declare enum Direction {
  2. Up,
  3. Down,
  4. Left,
  5. Right,
  6. }
  7. const directions = [Direction.Up, Direction.Down, Direction.Left, Direction.Right];
  1. const directions = [Direction.Up, Direction.Down, Direction.Left, Direction.Right];

declare 模块

声明模块的语法:declare module ‘模块名’ {}。在模块声明的内部,我们只需要使用 export 导出对应库的类、函数即可。

declare 文件

  1. declare module '*.jpg' {
  2. const src: string;
  3. export default src;
  4. }
  5. declare module '*.png' {
  6. const src: string;
  7. export default src;
  8. }

declare namespace

不同于声明模块,命名空间一般用来表示具有很多子属性或者方法的全局对象变量。

  1. declare namespace $ {
  2. const version: number;
  3. function ajax(settings?: any): void;
  4. }
  5. $.version; // => number
  6. $.ajax();

声明文件

在 TypeScript 中,以 .d.ts 为后缀的文件为声明文件。

在 TypeScript 中,存在类型、值、命名空间这 3 个核心概念。如果你掌握了这些核心概念,那么就能够为任何形式的类型书写声明文件了。