我注意到许多环境声明文件declarea namespace 和 a module只是导出命名空间,通常使用一些我不太懂的体操.例如,react.d.ts你看到这个:
declare namespace __React {
... entire API of the react library ...
}
declare module "react" {
export = __React;
}
Run Code Online (Sandbox Code Playgroud)
namespace和a module?为什么不在其中声明带有库API的模块呢?__React而不是简单React?这似乎是一个相当尴尬的"不要使用我"的名称,但IntelliJ IDEA已经在我的源代码中导入了它,它似乎工作.此模式用于支持UMD库.
这些库通常会在通过<script ...>标记加载时将某些内容放入全局范围,但如果通过RequireJS,CommonJS或SystemJS等模块系统调用,则会将某些内容返回给模块加载器.
在TypeScript中,这意味着如果您import调用了模块'react',则应该获得与引用全局标识符相同的类型React.
大多数定义文件只是编写他们的.d.ts文件,这样模块形状和全局变量总是存在; React如果你使用的是模块加载器(在这种情况下全局实际上并不存在),React的作者不喜欢你可能会意外地引用全局.所以他们将声明__React分离成一个单独的.d.ts文件声明了一个全局调用React,以及一个模块声明"react".
| 归档时间: |
|
| 查看次数: |
659 次 |
| 最近记录: |