cordova-plugin-camera
插件,想要查看该插件的类型定义。因此,我使用npm安装了@types/cordova-plugin-camera
包。在安装过程中,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"
生成单个文件。
⚠️在tsconfig.json
中使用types
属性
添加
"types": [
"cordova-plugin-camera"
]
对于 cordova-plugin-camera
,在tsconfig.json
中添加会起作用,但会导致 TypeScript 停止加载所有其他包的类型,因此我必须将每个带有类型的包都添加到我的tsconfig.json
中。
⚠️ 使用typeRoots
属性在tsconfig.json
中
添加:
"typeRoots": [
"./node_modules/@types",
"./node_modules/cordova-plugin-camera"
]
对于cordova-plugin-camera
和其他软件包,针对tsconfig.json
的设置有效,但是在每个不包含类型的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" />
在我的一个TypeScript文件中添加/// <reference types="cordova-plugin-camera" />
可以解决cordova-plugin-camera
和所有其他包的问题,而不会引起错误。但是我认为只向任何一个TypeScript文件添加引用(无论哪一个,只要它包含在构建中)似乎不正确。
是否有其他我尚未尝试过的方法?如何正确解决这个问题?