TypeScript深度剖析:TypeScript 中命名空间与模块的理解?区别?

这篇具有很好参考价值的文章主要介绍了TypeScript深度剖析:TypeScript 中命名空间与模块的理解?区别?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

typescript命名空间和模块,typerscript,typescript,javascript,前端

一、模块

TypeScript 与 ECMAScript 2015 一样,任何包含顶级 import 或者 export 的文件都被当成一个模块

相反地,如果一个文件不带有顶级的import或者export声明,那么它的内容被视为全局可见的

例如我们在在一个 TypeScript 工程下建立一个文件 1.ts,声明一个变量a,如下:

const a = 1

然后在另一个文件同样声明一个变量a,这时候会出现错误信息

typescript命名空间和模块,typerscript,typescript,javascript,前端

提示重复声明a变量,但是所处的空间是全局的

如果需要解决这个问题,则通过import或者export引入模块系统即可,如下:

const a = 10;

export default a

typescript中,export关键字可以导出变量或者类型,用法与es6模块一致,如下:

export const a = 1
export type Person = {
    name: String
}

通过import 引入模块,如下:

import { a, Person } from './export';

二、命名空间

命名空间一个最明确的目的就是解决重名问题

命名空间定义了标识符的可见范围,一个标识符可在多个名字空间中定义,它在不同名字空间中的含义是互不相干的

这样,在一个新的名字空间中可定义任何标识符,它们不会与任何已有的标识符发生冲突,因为已有的定义都处于其他名字空间中

TypeScript 中命名空间使用 namespace 来定义,语法格式如下:

namespace SomeNameSpaceName {
   export interface ISomeInterfaceName {      }
   export class SomeClassName {      }
}

以上定义了一个命名空间 SomeNameSpaceName,如果我们需要在外部可以调用 SomeNameSpaceName 中的类和接口,则需要在类和接口添加 export 关键字

使用方式如下:

SomeNameSpaceName.SomeClassName

命名空间本质上是一个对象,作用是将一系列相关的全局变量组织到一个对象的属性,如下:

namespace Letter {
  export let a = 1;
  export let b = 2;
  export let c = 3;
  // ...
  export let z = 26;
}

编译成js如下:文章来源地址https://www.toymoban.com/news/detail-725627.html

var Letter;
(function (Letter) {
    Letter.a = 1;
    Letter.b = 2;
    Letter.c = 3;
    // ...
    Letter.z = 26;
})(Letter || (Letter = {}));

三、区别

  • 命名空间是位于全局命名空间下的一个普通的带有名字的 JavaScript 对象,使用起来十分容易。但就像其它的全局命名空间污染一样,它很难去识别组件之间的依赖关系,尤其是在大型的应用中
  • 像命名空间一样,模块可以包含代码和声明。 不同的是模块可以声明它的依赖
  • 在正常的TS项目开发过程中并不建议用命名空间,但通常在通过 d.ts 文件标记 js 库类型的时候使用命名空间,主要作用是给编译器编写代码的时候参考使用

到了这里,关于TypeScript深度剖析:TypeScript 中命名空间与模块的理解?区别?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 你真的理解qsort函数吗?带你深度剖析qsort函数

    魔王的介绍:😶‍🌫️一名双非本科大一小白。 魔王的目标:🤯努力赶上周围卷王的脚步。 魔王的主页:🔥大魔王不哭 我们初识C语言时,会做过让一个整型数组按照从小到大来排序的问题,我们使用的是冒泡排序法,但是如果我们想要比较其他类型怎么办呢,显然我们

    2023年04月24日
    浏览(40)
  • 【C++从入门到放弃】stack和queue的深度剖析及空间适配器的介绍

    🧑‍💻作者: @情话0.0 📝专栏:《C++从入门到放弃》 👦个人简介:一名双非编程菜鸟,在这里分享自己的编程学习笔记,欢迎大家的指正与点赞,谢谢!   此篇博客将谈及到的stack、queue和priority_queue都不是STL的标准容器,而是一种空间适配器。它是通过对一种容器进行

    2024年02月11日
    浏览(42)
  • 深入理解 TypeScript 的 type 以及 type 与 interface 和 class 的区别

    TypeScript 是一种强类型的 JavaScript 超集,它为 JavaScript 提供了静态类型系统。在 TypeScript 中,我们可以使用 type 、 interface 和 class 为数据定义类型。本文将重点介绍 type 的作用以及它与 interface 和 class 的区别。 type type 是 TypeScript 中用于定义类型别名、联合类型、交叉类型等复

    2024年02月03日
    浏览(35)
  • 【C语言深度剖析——第四节(关键字4)】《C语言深度解剖》+蛋哥分析+个人理解

    追求本质,不断进步 本文由@睡觉待开机原创,转载请注明出处。 本内容在csdn网站首发 欢迎各位点赞—评论—收藏 如果存在不足之处请评论留言,共同进步! 前言: 本节博客继续前篇内容进行续写,我们着重探求有符号与无符号数的问题,探求 整形在内存中的存储 这一课

    2024年01月20日
    浏览(43)
  • 【C语言深度剖析——第三节(关键字3)】《C语言深度解剖》+蛋哥分析+个人理解

    本文由@睡觉待开机原创,未经允许不得转载。 本内容在csdn网站首发 欢迎各位点赞—评论—收藏 如果存在不足之处请评论留言,共同进步! 前言: 本期我们继续探讨关于C深度解剖这本书相关内容,继上一篇博客,本篇博客来围绕“数据类型”、“原反补”有关话题进行探

    2024年01月21日
    浏览(40)
  • 蓝牙透传模块芯片的BLE和SPP有什么区别?如何理解

      蓝牙透传芯片的BLE和SPP有什么区别?如何理解呢? 首先要明确几个,蓝牙芯片,蓝牙透传,蓝牙BLE,以及蓝牙SPP 第一:蓝牙芯片的概念可以参见一下网上的说明: 蓝牙芯片,一般都是属于SOC级别的芯片,区别于传统的MCU以及射频芯片,可以简单的理解为单颗芯片实

    2024年02月10日
    浏览(46)
  • 【C++】命名空间 namespace 与 标准流 iostream ( 命名空间概念简介 | 命名空间定义 | 命名空间使用 | iostream 中的命名空间分析 )

    命名空间 namespace 又称为 名字空间 , 名称空间 , 名域 , 作用域 , 是 C++ 语言 对 C 语言 的扩展 之一 ; C++ 中的 命名空间 namespace 指的是 标识符 的 可见范围 , C++ 标准库中的 所有 标识符 , 都定义在 std 命名空间中 ; 命名空间 英文名称是 \\\" namespace \\\" , name 是 名字 , 名称 的意思 ,

    2024年02月12日
    浏览(41)
  • 【深度学习笔记】彻底理解torch中的tensor与numpy中array区别及用法

    刚接触深度学习的同学,很多开源项目代码中, 张量tensor 与 数组array 都有使用,不清楚两者有什么区别,以及怎么使用,如何相互转换等。博主起初也有类似的疑惑,经过查阅资料以及实践,逐渐有了深入了解,本文将记录并分享自己对两者的理解,可供参考。 提示:以下

    2023年04月08日
    浏览(91)
  • 【深度学习】神经网络中 Batch 和 Epoch 之间的区别是什么?我们该如何理解?

    随机梯度下降(Stochastic Gradient Descent,SGD)是一种优化算法,用于在机器学习和深度学习中更新模型参数,以最小化损失函数。与传统的梯度下降算法不同,SGD在每次参数更新时只使用一个样本(或一小批样本),而不是使用整个训练数据集。这使得SGD具有更快的收敛速度,

    2024年02月10日
    浏览(38)
  • vs2022 命名空间“System”中不存在类型或命名空间名“Printing”

    在监控打印机状态的时候,需要用到System.Printing。 System.Printing 命名空间 | Microsoft Learn 在微软官网有这个命名空间,其中提到 不支持命名空间中的System.Printing类在Windows服务或 ASP.NET 应用程序或服务中使用。 尝试从其中一种应用程序类型内使用这些类可能会导致意外问题,例

    2024年02月05日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包