为什么某些npm库(例如Facebook SDK)的TypeScript类型定义没有导出?

时间:2018-08-13 04:37:10

标签: typescript facebook-javascript-sdk typescript-typings definitelytyped

在DefinitelyTyped存储库中,为什么某些库的类型定义文件具有导出功能,而另一些则没有?例如,Facebook SDK的类型定义文件没有导出,而Amazon Alexa SDK的类型定义文件没有导出。

我问,因为Facebook SDK是我遇到的第一个缺少导出的库。我尝试进行import {AuthResponse} from 'facebook-js-sdk'时发现了这一点,编译器抱怨.../node_modules/@types/facebook-js-sdk/index.d.ts' is not a module.

从类型定义中省略导出是否有一些好处,从而要求导入整个SDK(例如import 'facebook-js-sdk')而不是仅导入几种类型?还是@types/facebook-js-sdk根本不是使用最新的TypeScript最佳实践编写的?

此外,“导入所有内容”的无导出类型定义是否有与之相关的任何缺点或问题,我应该在导入它的代码中注意这些问题?

最后,假设有人接受了PR,以将导出内容添加到Facebook SDK的类型中。对于该类型定义的现有客户来说,这将是一项重大突破吗? (如果是这样,则说明了为什么未解决此问题!)

2 个答案:

答案 0 :(得分:1)

我认为作者在谈论@types/facebook-js-sdk npm模块,该模块为facebook JS SDK提供类型。

它应该与

一起导入
import 'facebook-js-sdk';

比起您能够使用FB.init(params)params必须具有类型InitParams。因此,类型检查将起作用。

答案 1 :(得分:0)

让我们看一下Facebook SDK is supposed to be used

  

用于JavaScript的Facebook SDK没有任何独立文件,这些文件   需要下载或安装,而只需包含   HTML中的一小段常规JavaScript   将SDK异步加载到您的页面中。异步加载意味着   它不会阻止加载页面的其他元素。

然后,您可以通过引用由该javacsript代码段定义的单个全局变量FB来使用SDK。

请注意,在您无需import进行任何操作的过程中,Facebook SDK不会使用模块。

这就是Facebook SDK的类型声明没有任何导出的原因-但这不是底层javascript代码应该起作用的方式。