其他软件包如何使用软件包打字稿代码?



当导入带有typescript代码的包时,消费者会使用打字稿还是转译代码(例如打字稿到ES5(。

场景 #1:如果使用者使用转译的代码(不在打字稿中(。VSCode 如何从包类型中推荐自动完成?

场景 #2:如果包与打字稿文件一起提供。

  1. 如果使用者不使用打字稿会发生什么?
  2. 消费者端的捆绑是如何发生的?

TL;博士

场景 #1:这是公共 NPM 包最常见的场景,编辑器使用包含类型声明的外部.d.ts文件 场景#2:我只在内部库中看到过这个

  • 1(你需要自己编译TS,但这可能不是必需的,因为几乎总是有一个编译到js版本的库,也是
  • 2(这可能有很多种方式,最好的情况是该库为您提供了一个预先优化的JS,该JS仅与您的代码捆绑在一起,最坏的情况是您必须确保安装了所有正确的依赖项,以便库能够与您的代码一起编译,并且它们需要与您自己使用的依赖项兼容。在我看来,这不值得麻烦,为 NPM 包提供类型声明足以满足 TypeScript 可以提供的类型安全级别。

长版本

人们通过NPM分发基于TypeScript的代码有几十种变体。我知道的大多数大型库都发布它们的编译(通常是缩小的(JS,并添加.d.ts声明文件以供编辑器支持 - 这些可能是手写的,也可以使用代码库中的tsc生成。VSCode也将其TypeScript语言服务器用于JavaScript文件,因此在许多情况下,它甚至不需要额外的声明文件来为您提供基本的自动完成功能。库可以在package.json内声明一个types字段,VSCode和其他编辑器会在那里找到类型。有一个相当大的社区,它为大多数库维护大多数非官方的类型声明 - 对于晦涩难懂的库,你可能不走运。

几个例子

材质用户界面

  • 是用JavaScript编写
  • 具有手写的 TypeScript 声明(可能准确,也可能不准确(

反应

  • 是用JavaScript编写
  • NPM 包不提供 TypeScript 声明,但 VSCode 知道在哪里可以找到非正式的外部声明

  • 用打字稿编写
  • 使用已弃用的typings字段指向其类型声明

jQuery

  • 是用JavaScript编写
  • 同样,没有提供类型声明,但您的编辑器可能知道如何获取非正式声明

塞涅卡

  • 是用JavaScript编写
  • 在撰写本文时具有两年前的非正式类型声明 - 祝您好运,了解 API 是否真的没有更改

重要要点:

  • 在JS生态系统中,人们做事的方式并不单一,并且扩展为TS生态系统。
  • 您使用的大多数类型声明都不是官方的,而是由社区维护的,主要是在 Definite typed
  • 这些类型可能对您撒谎(可能已过时,只是完全错误或用于较旧的 TS 版本(
  • TypeScript 是 JavaScript 的超集,根据定义,它带有所有相同的陷阱
  • 所有类型在运行时都会被删除,最终你运行的是普通的JavaScript
  • ,所有这些都需要

最新更新