Namespaces vs modules vs typings in typescript? 在TypeScript中,命名空间、模块和类型声明有什么区别?

55 浏览
0 Comments

Namespaces vs modules vs typings in typescript? 在TypeScript中,命名空间、模块和类型声明有什么区别?

请问有人可以用一个例子解释一下这些概念的区别吗?我真的很困惑,当它们都起同样的作用时,拥有三个有什么用呢?

0
0 Comments

Namespaces vs modules vs typings in TypeScript

在TypeScript中,命名空间(namespaces)、模块(modules)和类型声明(typings)是用于封装和描述代码的不同方式。

命名空间是一种将代码封装成部分,以防止全局作用域中的声明冲突的模式。它将导出的对象属性赋值给一个在全局作用域中唯一的变量,如$、_等。命名空间可以与函数、类或其他命名空间进行合并。

模块描述了ECMAScript、CommonJS、AMD和System.js等不同类型的模块。每个文件都有自己独立的作用域,并通过exports关键字将变量导出。模块是将代码分解为不同部分的推荐方式。

类型声明(typings)用于描述现有的代码,包括模块、命名空间、变量和类型声明等。它们可以通过命令行选项--declaration从.ts文件生成,也可以手动编写以描述现有的JavaScript代码。声明文件包含了实际描述的代码声明。

DefinitelyTyped是一个包含了3000多个库的声明文件的Git仓库。用户可以提交修复和新包的请求。

在TypeScript中,可以通过npm来获取DefinitelyTyped中的声明文件。例如,如果需要lodash的声明文件,可以使用npm install命令。

总结起来,命名空间、模块和类型声明在TypeScript中有不同的用途和作用。命名空间和模块用于封装和组织代码,而类型声明用于描述现有代码。声明文件可以描述命名空间和模块的结构和使用方式。

为了更好地理解这些概念,可以参考TypeScript官方文档中关于命名空间和模块的部分,以及其他相关资源。

0