你知道TS中的declare关键字吗

declare是什么

我们在编写自己的代码时,通常使用外部库定义的函数,这时候编译器会因为不知道外部函数的类型定义而报错,而 declare关键字,就是用来告诉编译器外部函数的类型。 这样的话,编译单个脚本就不会因为使用了外部类型而报错。而且所有的declare语句都不会出现在编译后的文件里面。

如果你也和我一样在为大厂冲刺的话,欢迎添加我的微信lx3122178991,这里有一群小伙伴有着和你同样的目标,欢迎来一起讨论,一同进步。

declare使用说明

declare关键字可以描述以下类型。

  • 变量
  • type 或者 interface 命令声明的类型
  • class
  • 枚举
  • 函数
  • 模块
  • 命名空间

变量

declare 关键字可以给出外部变量的类型描述。

TS 复制代码
x = 123; // 报错

declare let x:number;
x = 1;

第一行代码,变量x是其他脚本定义的,当前脚本不知道它的类型,编译器就会报错。 如果使用declare命令给出它的类型,就不会报错了。如果declare关键字没有给出变量的类型,那么变量类型默认any

TS 复制代码
declare let x;
x = 1;//any

declare关键字只用来给出类型描述,不允许设置变量的初始值。

TS 复制代码
// 报错
declare let x:number = 1;

上面示例中,declare 设置了变量的初始值,结果就报错了。

函数

declare 关键字可以给出外部函数的类型描述。

下面是一个例子。

TS 复制代码
declare function say(
  name:string
):void;

say('张三');

declare 命令给出了say()的类型描述,因此可以直接使用它。

但是这种单独的函数类型声明语句,只能用于declare命令后面。 因为TS不支持单独的函数类型声明语句。

TS 复制代码
//报错
function say(
  name:string
):void;

class

declare 给出 class 类型描述的写法如下。注意**declare后面不能给出class的具体实现或初始值。**

TS 复制代码
declare class A {
  constructor(name:string);
  eat():void;
}

枚举

declare关键字给出枚举类型描述有多种写法,并没有什么区别。

例子:

TS 复制代码
//写法一
declare enum E1 {
  A,
  B,
}
//写法二
declare enum E2 {
  A = 0,
  B = 1,
}
//写法三
declare const enum E3 {
  A,
  B,
}
//写法四
declare const enum E4 {
  A = 0,
  B = 1,
}

模块和命名空间

当我们想把变量、函数和类组织在一起,就可以将declaremodulenamespace一起使用。

TS 复制代码
declare namespace AnimalLib {
  class Animal {
    constructor(name:string);
    eat():void;
    sleep():void;
  }
  type Animals = 'Fish' | 'Dog';
}

// 或
declare module AnimalLib {
  class Animal {
    constructor(name:string);
    eat(): void;
    sleep(): void;
  }

  type Animals = 'Fish' | 'Dog';
}
相关推荐
GISer_Jing4 分钟前
sqb&ks二面(准备)
前端·javascript·面试
谢尔登9 分钟前
【Webpack】模块联邦
前端·webpack·node.js
Bottle41426 分钟前
深入探究 React Fiber(译文)
前端
汤姆Tom32 分钟前
JavaScript Proxy 对象详解与应用
前端·javascript
xiaopengbc38 分钟前
在 React 中如何使用 useMemo 和 useCallback 优化性能?
前端·javascript·react.js
GISer_Jing40 分钟前
React 18 过渡更新:并发渲染的艺术
前端·javascript·react.js
全栈技术负责人1 小时前
前端网络性能优化实践:从 HTTP 请求到 HTTPS 与 HTTP/2 升级
前端·网络·http
码上暴富2 小时前
Echarts雷达图根据数值确定颜色
前端·javascript·echarts
Mintopia2 小时前
在混沌宇宙中捕捉错误的光——Next.js 全栈 Sentry / LogRocket
前端·javascript·next.js
Mintopia2 小时前
长文本 AIGC:Web 端大篇幅内容生成的技术优化策略
前端·javascript·aigc