如何获取TypeScript以加载Cordova插件随附的类型

Rob*_*ann 8 cordova typescript 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" 
]
Run Code Online (Sandbox Code Playgroud)

到tsconfig.json了作品cordova-plugin-camera,但会导致打字稿停止加载类型的所有其他包,所以我不得不每一个封装类型,以我的补充tsconfig.json。


?? 在中使用typeRoots属性tsconfig.json

新增中

"typeRoots": [
  "./node_modules/@types",
  "./node_modules/cordova-plugin-camera"
]
Run Code Online (Sandbox Code Playgroud)

到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'.
Run Code Online (Sandbox Code Playgroud)

使用./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文件添加引用(只要构建中包含该文件都无所谓),对我来说似乎都不对。


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

Mat*_*hen 6

我相信这/// <reference types="cordova-plugin-camera" />是正确的方法。您可以将其视为import 'cordova-plugin-camera'不使用模块的项目的类似物。在这两种情况下,您都必须任意选择一个文件来保存指令(或者,如果愿意,可以将其放入多个文件中;这没有什么区别)。

开箱即用,仅@types自动包含软件包,因此,如果您使用@types提供全局声明的非软件包,我猜您应该使用/// <reference types="..."/>或import '...'。