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

为什么某些npm库(如Facebook SDK)的TypeScript类型定义没有导出?,typescript,facebook-javascript-sdk,typescript-typings,definitelytyped,Typescript,Facebook Javascript Sdk,Typescript Typings,Definitelytyped,在DefinitelyTyped repo中,为什么有些库的类型定义文件有导出,而其他库的类型定义文件没有导出?例如,的类型定义文件缺少导出,但的类型定义文件具有导出 我这么问是因为Facebook SDK是我遇到的第一个缺少导出的库。当我尝试从“facebook js sdk”导入{AuthResponse}时,我发现了这一点,编译器抱怨../node\u modules/@types/facebook js sdk/index.d.ts'不是模块。 从类型定义中省略导出,从而要求导入整个SD

在DefinitelyTyped repo中,为什么有些库的类型定义文件有导出,而其他库的类型定义文件没有导出?例如,的类型定义文件缺少导出,但的类型定义文件具有导出

我这么问是因为Facebook SDK是我遇到的第一个缺少导出的库。当我尝试从“facebook js sdk”导入{AuthResponse}时,我发现了这一点,编译器抱怨
../node\u modules/@types/facebook js sdk/index.d.ts'不是模块。

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

另外,“import everything”export-less样式的类型定义是否有任何缺点或问题需要我在导入它的代码中加以注意

最后,假设有人接受了一个PR,将导出添加到Facebook SDK的打字中。对于该类型定义的现有客户机来说,这会是一个突破性的变化吗?(如果是这样的话,这就解释了为什么这个问题没有得到解决!)

让我们看看:

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

之后,您可以通过引用一个全局变量来使用SDK,
FB
,该变量由JavaCScript代码段定义

请注意,在导入任何内容的过程中,Facebook SDK都不使用模块


这就是为什么FacebookSDK的类型声明没有任何导出的原因——这不是底层javascript代码的工作方式。

我想作者正在谈论的是为FacebookJSSDK提供类型的npm模块

而且应该是进口的

import 'facebook-js-sdk';

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

Typescript需要定义函数的类型等。这就是@types/facebook js sdk中的内容。