TypeScript中declare关键词作用小结

 更新时间:2025年08月12日 09:36:27   作者:CAD老兵  
declare是一个非常重要的关键字,主要用于声明变量、函数、类、模块或命名空间的类型,下面就来介绍一下declare关键词的使用,感兴趣的可以了解一下

在 TypeScript 中,declare 是一个非常重要的关键字,主要用于声明变量、函数、类、模块或命名空间的类型,而不进行实际的实现。它通常用于告诉 TypeScript 编译器某个标识符已经在其他地方(比如 JavaScript 文件、全局作用域、第三方库)被定义了,从而避免类型检查报错。

一、为什么需要declare?

TypeScript 是一种静态类型语言,需要在编译时知道所有标识符的类型信息。如果你使用了一个在 JavaScript 中定义、但 TypeScript 无法推断其类型的变量或函数,编译器就会报错。此时可以使用 declare显式地告诉编译器这个标识符已经存在于运行时环境中

举个例子,如果你在使用一个浏览器全局变量 window.myPlugin,TypeScript 默认是不知道这个变量的:

console.log(window.myPlugin); // 报错:Property 'myPlugin' does not exist on type 'Window & typeof globalThis'.

你可以用 declare 来声明它:

declare global {
  interface Window {
    myPlugin: any;
  }
}

或者:

declare const myPlugin: any;

这样编译器就不会报错了。

二、declare的使用场景

1. 声明全局变量

declare const VERSION: string;
console.log(VERSION);

这告诉 TypeScript:VERSION 是在其他地方定义的(比如通过 <script> 标签引入的脚本),类型是 string

2. 声明函数

declare function greet(name: string): void;

表示 greet 是一个已经存在的函数,不需要在当前文件中实现它。

3. 声明类

declare class Animal {
  name: string;
  constructor(name: string);
  speak(): void;
}

这个类可能是在其他 JavaScript 文件或第三方库中定义的。

4. 声明模块

declare module 'my-library' {
  export function doSomething(): void;
}

适用于没有类型声明文件(.d.ts)的第三方库。

5. 声明命名空间

declare namespace MyLib {
  function func(): void;
}

适用于一些老的、通过全局对象暴露 API 的库。

三、.d.ts文件中的declare

在 TypeScript 的类型声明文件(通常以 .d.ts 结尾)中,declare 是主角。所有的声明都不会编译成 JavaScript,而是仅用于类型检查和代码提示。

比如:

// my-types.d.ts
declare const myGlobal: number;
declare function myFunc(): void;
declare module 'some-lib' {
  export function hello(): string;
}

当你安装一个第三方 JavaScript 库时,如果没有内置类型定义,可以手动编写 .d.ts 文件进行补充。

四、不使用declare会怎样?

如果你在没有类型声明的情况下使用未定义的标识符,TypeScript 会报错。例如:

console.log(EXTERNAL_VAR); // 错误:Cannot find name 'EXTERNAL_VAR'

使用 declare 后:

declare const EXTERNAL_VAR: string;
console.log(EXTERNAL_VAR); // 正确

五、总结

用法示例说明
声明变量declare const foo: number;告诉 TS 有一个外部变量 foo
声明函数declare function bar(): void;声明外部函数,无需实现
声明类declare class Person {}声明外部类
声明模块declare module 'lib' {}用于第三方库的类型声明
声明全局接口declare global {}扩展全局作用域,如 Window 接口等

declare 是 TypeScript 与 JavaScript 和第三方库互操作的桥梁。合理使用它,能让你的代码既保持类型安全,又能自由调用外部资源。

到此这篇关于TypeScript中declare关键词作用小结的文章就介绍到这了,更多相关TypeScript declare关键词内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 小议Javascript中的this指针

    小议Javascript中的this指针

    在全局执行环境中使用this,标识Global对象,在浏览器中就是window对象。
    2010-03-03
  • JS 数组和对象的深拷贝操作示例

    JS 数组和对象的深拷贝操作示例

    这篇文章主要介绍了JS 数组和对象的深拷贝操作,结合实例形式分析了JS 数组和对象的深拷贝基本原理与操作技巧,需要的朋友可以参考下
    2020-06-06
  • javascript实现节点(div)名称编辑

    javascript实现节点(div)名称编辑

    这篇文章主要介绍了js实现节点(div)名称编辑,需要的朋友可以参考下
    2014-12-12
  • 使用js实现瀑布流效果

    使用js实现瀑布流效果

    这篇文章主要为大家详细介绍了使用js实现瀑布流效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • JS实现仿Windows经典风格的选项卡Tab切换代码

    JS实现仿Windows经典风格的选项卡Tab切换代码

    这篇文章主要介绍了JS实现仿Windows经典风格的选项卡Tab切换代码,涉及JavaScript元素的遍历与样式的修改技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-10-10
  • JavaScript实现消息对话框

    JavaScript实现消息对话框

    这篇文章主要为大家详细介绍了JavaScript实现消息对话框,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-09-09
  • JavaScript实现手势识别的示例详解

    JavaScript实现手势识别的示例详解

    这篇文章主要为大家详细介绍了JavaScrip如何利用 TensorFlow.js 中的 HandPose 模型,实现一个基于视频流的手势识别系统,感兴趣的可以了解下
    2024-12-12
  • 微信小程序实现日历打卡

    微信小程序实现日历打卡

    这篇文章主要为大家详细介绍了微信小程序实现日历打卡,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • javascript递归回溯法解八皇后问题

    javascript递归回溯法解八皇后问题

    网上看到许多关于八皇后算法的文章,很少能看到使用javascript来实现的,今天就给大家使用javascript来解决下这个问题,有需要的小伙伴可以参考下。
    2015-04-04
  • TypeScript枚举的基础知识及实例

    TypeScript枚举的基础知识及实例

    使用枚举我们可以定义一些带名字的常量,使用枚举可以清晰地表达意图或创建一组有区别的用例,下面这篇文章主要给大家介绍了关于TypeScript枚举的基础知识及实际用例,需要的朋友可以参考下
    2021-10-10

最新评论