你知道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';
}
相关推荐
Bolt12 小时前
TypeScript 7.0 来了:当 tsc 用 Go 重写之后
javascript·typescript·go
闪闪发光得欧12 小时前
前端提效新思路:Gemini 3.5 自动化定位 CSS 异常
前端·css
yingyima12 小时前
掌握正则表达式的核心:贪婪与非贪婪匹配的底层机制
前端
奇奇怪怪的13 小时前
文档摄入与 Chunking 策略全对决
前端
阳火锅13 小时前
😭测试小姐姐终于不骂我了!这个提BUG神器太香了...
前端·javascript·面试
道友可好14 小时前
AI 是最好的混乱放大器:代码熵管理实战
前端·人工智能·后端
猩猩程序员14 小时前
前端学习 AI Agent 开发
前端
Younglina15 小时前
打了3年羽毛球球才发现:我对自己的装备和胜率一无所知
前端·后端
风骏时光牛马15 小时前
Bash脚本高阶实战与常见报错完整代码案例详解
前端
kartjim15 小时前
我用 AI 一小时写了一个世界杯数据可视化平台|前端 VibeCoding 初体验
前端·程序员·ai编程