ts声明文件中,命名空间 module 等语法内容如何书写

ts声明文件中,命名空间 module 等语法内容如何书写

问题描述:

请问老师们,有个ts问题一直一直困扰着我,无法得解:


declare namespace xxx {

      这里面是什么语法,这里面能写什么代码,看到有写具体实现的,也有类型的,有的在export,有的没export,哪些在外面能访问,哪些不能访问,这些都不清楚

}


declare module xxx {

      这里面是什么语法,这里面能写什么代码,看到有写具体实现的,也有类型的,有的在export,有的没export,哪些在外面能访问,哪些不能访问,这些都不清楚

}


https://img1.sycdn.imooc.com//climg/627bdf7c098c3c1512330915.jpg

这里没看明白




https://img1.sycdn.imooc.com//climg/627be03609d6b0fc07380229.jpg

这个export是什么意思了, 有些.d.ts怎么有export 有些又没有呢


烦请老师门讲讲命名空间 和declare module里面这些详情,这些东西云里雾里的,以至于课程上这些看不太明白为什么这么写

https://img1.sycdn.imooc.com//climg/627be12309a3637808070379.jpg

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好

非常好的问题,我来尝试解答一下。因为这两个概念也容易混淆,所以文档中专门有一节来描述:

https://www.tslang.cn/docs/handbook/namespaces-and-modules.html


不看文档这些晦涩的东西,直接举例说结论,你最开始上面说的 declare namespace 以及 declare  module 都是为了为声明定义文件所诞生的。

区别是 declare namespace 服务于一些没有采用 es6 modules 的库的定义,比如一些全局变量的类型,(jQuery 啥的)比如官方的例子:


https://www.typescriptlang.org/docs/handbook/namespaces.html#d3dts-simplified-excerpt


declare module 服务于支持 es6modules 或者 commonjs 的库的定义,比如

https://www.typescriptlang.org/docs/handbook/modules.html#ambient-modules

我认为这两个例子写的很好,看一下你很快的就可以理解。


说完了这两个,再来说你那张第一张图上的意思,这里特别注意是 namespace 的其他用法,namespace 除了进行 declare 还可以对类型就行分组。这个很好理解,其实就是把一些相关的类型使用namespace 进行分组,这样在访问这些类型的时候会更方便直观。上面的英文也写了(organize types), 其实就是更方便的分组或者管理。


第二张图:是另外一种给 es6 modules 写定义的方式(React 的类型文件还是这种方式),就是和 declare module 一样的功效,你可以将它理解为用 es6 moduels 的语法写定义文件,但是我建议统一使用 declare module 的方式。所以,由于 ts 的发展的历史原因,你会看到各种各样的写定义的方式,

慢慢理解一下,不懂的可以继续问欧


  • xthj 提问者 #1

    看了这些链接 感觉明白些了

    2022-05-12 14:11:23
  • 把一些相关的类型使用namespace 进行分组,这样在访问这些类型的时候会更方便直观。

    我对句话不是很理解,namespace 命名空间关键字吗?namespace也可以用来定义类型声明?

    2022-11-12 11:50:31
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师