详解TypeScript如何正确使用Declare关键字

 更新时间:2023年08月10日 10:59:20   作者:云端科技  
如果您编写 TypeScript 代码的时间足够长,您就已经看到过declare关键字,但它有什么作用,为什么要使用它呢,下面小编就来和大家简单讲讲

如果您编写 TypeScript 代码的时间足够长,您就已经看到过declare关键字。但它有什么作用,为什么要使用它?

declare关键字告诉 TypeScript 编译器存在一个对象并且可以在代码中使用。

本文解释了声明关键字并通过代码示例展示了不同的用例。

定义

在 TypeScript 中,declare关键字告诉编译器存在一个对象(并且可以在代码中引用)。它向 TypeScript 编译器声明该对象。简而言之,它允许开发人员使用在其他地方声明的对象。

编译器不会将此语句编译为 JavaScript。

开发人员可能需要使用声明关键字:

  • 使用在另一个文件中声明的全局变量。
  • 使用另一个文件生成的函数、变量或类。
  • ETC。

很多时候,declare关键字用于 TypeScript 声明文件 ( .d.ts )。

使用声明关键字,您可以声明:

  • 变量(const、let、var)。
  • 类型或接口
  • A类
  • 一个枚举
  • 一个功能
  • 一个模块
  • 命名空间

声明函数或类时,您只声明它们的结构,而不是它们的实现。

具体例子

您想要在 TypeScript 代码中使用 Google Analytics 脚本。为此,您必须将其包含在 HTML 页面中。

你可以这样包含它:

<script async src="https://www.googletagmanager.com/gtag/js?id=TAG_ID"></script><script>
  window.dataLayer = window.dataLayer || [];  function gtag(){dataLayer.push(arguments)};
  gtag('js', new Date());
  gtag('config', 'TAG_ID');</script>

dataLayer数组在 HTML 中声明。 TypeScript 编译器不知道它,所以如果你想使用它,你需要声明它。

以下是声明方式:

declare const dataLayer: any[];

您现在可以在 TypeScript 代码中使用dataLayer变量。

使用

通常,TypeScript 代码需要导入资源,例如图像或可缩放矢量图形 (SVG)。

在这些情况下,您必须为每个模块创建一个声明。

例如,如果我们想在代码中使用 PNG,我们可以创建如下声明:

declare module '*.png' {    const src: string;    export default src;}

在本例中,我们使用通配符模块声明,因此我们不必单独声明每个图像路径。

如何声明全局变量

在声明文件中输入变量名称并键入以 声明全局变量。

这是一个例子:

declare var CPT: number;

我们现在可以在代码中使用CPT变量。

如何声明全局函数

将函数定义写入声明文件中以声明全局函数。

这是一个例子:

declare function sayHello(hello: string): void;

现在我们可以在代码中使用sayHello函数。

如何声明一个类

声明类时,只需编写类结构,而不编写每个函数的实现。

这是一个例子:

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

我们现在可以在代码中实例化Animal类。

如何组织类型和对象

要组织多种类型和对象,您可以声明以下概念之一:

  • 命名空间
  • 一个模块

在它们内部,声明所有类型、对象、类等。

以下是命名空间声明的示例:

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';}

使用声明关键字来扩充模块

开发人员还可以使用声明关键字来扩充模块。

例如,我们可以向模块内包含的现有接口添加新属性。

下面是一个例子:

import { 
    Palette as MuiPallete } from '@mui/material/styles/createPalette';
  declare module '@mui/material/styles/createPalette' {    interface Palette extends MuiPallete {
        custom: {
            prop1: string;
        }
    }}

在这里,我们从 Material UI 样式模块扩充Palette 界面并添加自定义对象。

使用声明关键字将声明添加到全局范围

开发人员还可以使用声明关键字将声明添加到全局范围。

例如,以下是向String JavaScript 对象添加新方法的方法:

declare global {    interface String {
        toSmallString(): string;
    }}
  String.prototype.toSmallString = (): string => {    // implementation.
    return '';};

在此示例中,我们向String原型添加一个名为toSmallString的新函数。

最后的想法

正如您所看到的,当使用在其他地方创建的变量时,declare关键字非常有用。

尽管这个概念并不为人所知,但要成为一名全面的 TypeScript 程序员并能够帮助您的同行,必须充分理解它。

到此这篇关于详解TypeScript如何正确使用Declare关键字的文章就介绍到这了,更多相关TypeScript Declare内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • js实现树形数据转成扁平数据的方法示例

    js实现树形数据转成扁平数据的方法示例

    这篇文章主要介绍了js实现树形数据转成扁平数据的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • JS实现滑动导航效果

    JS实现滑动导航效果

    这篇文章主要为大家详细介绍了JS实现滑动导航效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-01-01
  • JS跳过debugger的几种方法小结

    JS跳过debugger的几种方法小结

    本文主要介绍了JS跳过debugger的几种方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • ES6中的rest参数与扩展运算符详解

    ES6中的rest参数与扩展运算符详解

    rest参数和扩展运算符都是ES6新增的特性。下面这篇文章主要给大家介绍了关于ES6中rest参数与扩展运算符的相关资料,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-07-07
  • uniapp中uni.switchTab无法传参的解决办法

    uniapp中uni.switchTab无法传参的解决办法

    uni.switchTab跳转的必须是TabBar上的路径,下面这篇文章主要给大家介绍了关于uniapp中uni.switchTab无法传参的解决办法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-01-01
  • 微信小程序实现接收验证码

    微信小程序实现接收验证码

    这篇文章主要为大家详细介绍了微信小程序实现接收验证码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • 三种检测iPhone/iPad设备方向的方法

    三种检测iPhone/iPad设备方向的方法

    这篇文章主要介绍了检测iPhone/iPad设备方向的三种方法,需要的朋友可以参考下
    2014-04-04
  • javascript开发随笔一 preventDefault的必要

    javascript开发随笔一 preventDefault的必要

    给a做按钮的click事件加preventDefault阻止浏览器的默认行为貌似是印象中必须的事情
    2011-11-11
  • JavaScript中你不知道的数学方法分享(非常实用)

    JavaScript中你不知道的数学方法分享(非常实用)

    JavaScript的Math对象包含了一些非常有用和强大的数学操作,可以在Web开发中使用,本文为大家整理了一些非常实用的数学方法,希望对大家有所帮助
    2023-07-07
  • IE DOM实现存在的部分问题及解决方法

    IE DOM实现存在的部分问题及解决方法

    IE DOM实现存在的部分问题及解决方法
    2009-07-07

最新评论