TypeScript包含没有JS库的@types的原理是什么?

TypeScript包含没有JS库的@types的原理是什么?

问题描述:

通过参考@types/foo,我们可以在TypeScript代码中使用JavaScript库的功能。但为什么?它只是定义了一堆数据类型和接口,但实际的逻辑仍然在JS代码中。如何在不包含原始JS库的情况下运行代码?TypeScript包含没有JS库的@types的原理是什么?

例如,要在TypeScript中实现地图服务,我们只包含@types/googlemaps而没有JS库googlemaps。为什么这样?

+0

一般来说,不,这不是它的工作原理。 – deceze

+0

添加“@ types/googlemaps”只包含该lib的类型定义,以便开发,但不会替换该lib。 lib仍然必须在运行时出现。 – Thomas

+0

它会是怎样?你可以给一个不包含googlemaps lib的工作[MCVE](http://*.com/help/mcve)吗? – Pac0

如果没有实际库,代码将无法运行。一般来说,你会对@types有一个开发依赖,并且完全依赖于实际的库。

这些类型用于为库回填类型信息,从而为您提供自动完成,提示和类型检查 - 但实际上它们在运行时并未提供任何内容。

在某些情况下,程序包将提供自己的类型,因此您不需要@types开发依赖项,但几乎不存在相反的情况(唯一的例外情况是lib.d.ts不包括在内一个由浏览器等支持的功能,并且你暂时使用了一个定义来让编译器知道它)。

+1

非常感谢!我很快意识到我的谷歌地图的例子是错误的,因为我实际上在我的html中嵌入了它的api标签。在这种情况下,不需要包含额外的'googlemaps' npm软件包。 – Jize