在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的类型中。对于该类型定义的现有客户来说,这将是一项重大突破吗? (如果是这样,则说明了为什么未解决此问题!)
答案 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代码应该起作用的方式。