typescript - 如何让 TypeScript 加载 cordova 插件中包含的类型

标签 typescript cordova cordova-plugins typescript-typings

我使用 cordova-plugin-camera在我用 TypeScript ( 3.0.1 ) 编写的基于 cordova 的应用程序中,我希望能够看到该插件的类型。

所以我安装了包 @types/cordova-plugin-camera使用 npm。安装过程中 npm 显示 WARN deprecated解释这个@types不需要包,因为类型已经包含在包中 cordova-plugin-camera .因此,我再次删除了包。

然后我开始编译,但它失败了 error TS2339: Property 'camera' does not exist on type 'Navigator' .我的理解是,这应该开箱即用(至少对于 @types 包),但 TypeScript 似乎不知道它应该直接包含来自 cordova-plugin-camera 的类型。 .这似乎合乎逻辑,因为我没有明确的声明告诉它 import 'cordova-plugin-camera' ,但没有必要,因为我只使用由 cordova 加载的全局可用对象。

如何让 TypeScript 直接从 cordova-plugin-camera 加载类型?


我已经尝试过的可能解决方案


🚫 import 'cordova-plugin-camera'

在我的情况下不起作用,因为我从事的项目很旧并且不支持模块。它只使用 outFile 生成一个文件和 "module": "none" .


⚠️ 使用types tsconfig.json 中的属性

添加

"types": [ 
  "cordova-plugin-camera" 
]

tsconfig.json适用于 cordova-plugin-camera ,但会导致 TypeScript 停止为所有其他包加载类型,因此我必须将每个带有类型的包添加到我的 tsconfig.json .


⚠️ 使用typeRoots tsconfig.json 中的属性

添加

"typeRoots": [
  "./node_modules/@types",
  "./node_modules/cordova-plugin-camera"
]

tsconfig.json适用于 cordova-plugin-camera和其他包,但会在构建期间为 cordova-plugin-camera 中的每个文件夹导致选项错误不包含类型:

error TS2688: Cannot find type definition file for '.github'.
error TS2688: Cannot find type definition file for 'appium-tests'.
error TS2688: Cannot find type definition file for 'doc'.
error TS2688: Cannot find type definition file for 'jsdoc2md'.
error TS2688: Cannot find type definition file for 'src'.
error TS2688: Cannot find type definition file for 'tests'.
error TS2688: Cannot find type definition file for 'www'.

使用 ./node_modules/cordova-plugin-camera/types而不是 ./node_modules/cordova-plugin-camera导致 TypeScript 找不到类型并使用 ./node_modules导致每个没有类型的包的选项错误。


✅ 使用 /// <reference types="cordova-plugin-camera" />

添加/// <reference types="cordova-plugin-camera" />我的一个 TypeScript 文件适用于 cordova-plugin-camera和所有其他包而不会导致错误。但是仅添加对任何一个 TypeScript 文件的引用(无论哪个文件都包含在构建中都无关紧要)对我来说似乎不合适。


还有没有其他方法我没试过? 解决此问题的正确方法是什么?

最佳答案

我相信/// <reference types="cordova-plugin-camera" />是正确的做法。您可以将其视为 import 'cordova-plugin-camera' 的类比。对于不使用模块的项目。在任何一种情况下,您都必须任意选择一个文件来保存指令(或者您可以根据需要将其放在多个文件中;这没有区别)。

开箱即用,only @types packages are automatically included , 所以如果你使用非 @types提供全局声明的包,我猜你应该使用 /// <reference types="..."/>import '...' .

关于typescript - 如何让 TypeScript 加载 cordova 插件中包含的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51930765/

相关文章:

paypal - 如何使用 paypal cordova 插件测试我的 cordova 应用程序

typescript - plainToClass 不会将日期转换为字符串

typescript - 如何在 VSCode 中查看大型 typescript 类型?

javascript - Typescript 中是否可以嵌套枚举?

ios - Cordova - 体系结构 x86_64 的 undefined symbol

android - 强制重新启动完整的应用程序以刷新 Cordova 中的包

javascript - Typescript/Javascript 中的复合 Promise?

android - 如何使用 phonegap 在 Android 手机上显示摄像头

objective-c - PhoneGap 应用程序的 iPad 测试 - 主要方法中的问题

javascript - $cordova ImagePicker 不适用于 Ionic-Framework