返回博客首页
← 所有文章

8.2 版本后我的类型去哪儿了?

2022 年 3 月 28 日 — 作者 Alex Ziskind

当升级到 @nativescript/types 8.2(平台 API 类型声明)时,您可能会注意到一些与各种 iOS 类型相关的 TypeScript 编译错误。在这篇文章中,我将向您展示这样做的原因以及如何使这些类型再次工作。

types1

如果您遇到此问题并且只想了解解决方案,请跳到最后。如果您想了解解释,请继续阅读。

注意:您可以使用@nativescript/types,这是一个方便的单个包,其中包含**所有**NativeScript 平台 TypeScript 声明,或者您可以通过@nativescript/types-ios@nativescript/types-android使用单独的平台类型包(两者都包含在@nativescript/types中作为方便之举)。

历史

iOS 和 Android 平台都在积极开发并不断发展。由于这种发展,这两个平台提供的公共 API 也在不断增加。我们也喜欢在 NativeScript 应用程序中直接使用这些公共 API。如果您使用的是 TypeScript,NativeScript 会为您提供开箱即用的原生平台 API 类型,以便您可以在应用程序代码或插件中利用原生 API。

问题

随着原生 API 数量的增长,可在 NativeScript 中使用的 TypeScript 声明的数量也在增长。虽然声明更多类型根本不会影响运行时性能,但它可能会影响开发人员体验和构建时间,因为 IDE 中的 TypeScript 语言服务也会索引这些类型并在编译期间加载它们。

NativeScript 的解决方案

每个应用程序开发都需要所有原生 API 吗?

答案是绝对的“不”。

有很多不太常用的 API 可以安全地从类型检查中删除,并且对大多数开发没有影响。

如何找回你的类型

一个很好的例子是我自己遇到的,它是 iOS 中的 App Tracking Transparency API。我正在开发的应用程序引用了诸如ATTrackingManager之类的类,并且在升级到 8.2 之前,我的 TypeScript 代码编译得很好。但是,一旦我将我的类型包更新到"@nativescript/types": "~8.2.0",,这些 TypeScript 类型就停止工作了,并且我的编辑器(VS Code)用醒目的红色下划线报错。

types2

我也无法再构建我的项目,因为 TypeScript 错误。

这个问题的解决方案很简单,并且应该帮助您了解您可以利用此理解赋予自己的其他用例。

第一步:识别丢失的类型

您很可能已经知道它们是什么,因为您可能收到了 TypeScript 构建错误。在我的例子中,我需要在 App Tracking Transparency API 中找到一些类,包括ATTrackingManager

第二步:查找丢失的类型定义

搜索您的node_modules/@nativescript/types-iosnode_modules/@nativescript/types-android文件夹。

types3

在我的例子中,我在一个声明文件中找到了我需要的所有 App Tracking Transparency 类型。

types4

第三步:引用类型文件

将一个新的引用添加到该路径到您的项目的references.d.ts文件中。这是我完成后它的样子

types5

第四步:清理并构建 😃

ns clean

您现在知道如何在各种不同的 TypeScript 项目需求下利用 NativeScript 的强大功能。