ts声明文件中,命名空间 module 等语法内容如何书写
问题描述:
请问老师们,有个ts问题一直一直困扰着我,无法得解:
declare namespace xxx {
这里面是什么语法,这里面能写什么代码,看到有写具体实现的,也有类型的,有的在export,有的没export,哪些在外面能访问,哪些不能访问,这些都不清楚
}
declare module xxx {
这里面是什么语法,这里面能写什么代码,看到有写具体实现的,也有类型的,有的在export,有的没export,哪些在外面能访问,哪些不能访问,这些都不清楚
}

这里没看明白

这个export是什么意思了, 有些.d.ts怎么有export 有些又没有呢
烦请老师门讲讲命名空间 和declare module里面这些详情,这些东西云里雾里的,以至于课程上这些看不太明白为什么这么写

正在回答
同学你好
非常好的问题,我来尝试解答一下。因为这两个概念也容易混淆,所以文档中专门有一节来描述:
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 的发展的历史原因,你会看到各种各样的写定义的方式,
慢慢理解一下,不懂的可以继续问欧
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星