更多内容请访问:与华为官方共建的鸿蒙技术社区https://harmonyos.51cto.com使用DevEco开发OpenHarmonyDo应用小伙伴经常会发现OpenHarmony提供了接口支持,但是IDE没有任何提示,甚至报错。您需要使用忽略方法@ts-ignore来防止开发过程被阻塞。那么跟着小编一起来探索一下OpenHarmony的声明文件吧。查看OpenHarmonyAPI的声明文件也是帮助理解OpenHarmony接口能力的好方法。(但API不一定全部实现)API声明文件公共仓库公共仓库地址:https://gitee.com/openharmony/interface_sdk-js/tree/master选择当前系统对应的版本,这里我的版本是3.1beta.进入api文件夹可以看到声明文件。DevEco声明文件文件位置:【OpenHarmonySDK文件夹】\ets\3.1.0.0\api\common【OpenHarmonySDK文件夹】\js\3.1.0.0\api\phonetypescript声明文件声明文件以.d.ts结尾,里面主要使用定义类型。TypeScript作为JavaScript的超集,自然要考虑如何让JS库定义静态类型。所以TypeScript想出了DefinitelyTyped。DefinitelyTyped是让你通过编辑器(或插件)使用“类型定义文件(*.d.ts)”来检测JS库中的静态类型。导出和导入语句导出或导入目标的所有含义。如何阅读声明文件让我们看一下@ohos.resourceManager.d.ts文件。公共仓库:https://gitee.com/openharmony/interface_sdk-js/blob/OpenHarmony-3.1-Beta/api/@ohos.resourceManager.d.ts本地:【OpenHarmonySDK文件夹】\ets\3.1.0.0\api\common@ohos.resourceManager.d.ts也可以结合HarmonyOS文档阅读:https://developer.harmonyos.com/cn/docs/documentation/doc-references/js-apis-resource-manager-0000001200042191declare声明变量使用关键字declare来指示声明后的全局变量的类型。declarenamespaceresmgr{...}exportdefaultresmgr;导入这个模块。从“@ohos.resourceManager”导入resmgr;导入这个模块,你会发现一个错误。查看错误:我们去SDK文件夹查看@ohos.resourceManager.d.ts文件,会发现最后少了一个大括号。...}//在这里加一个大括号}exportdefaultresmgr;重启DevEco,发现错误信息没有了,我们继续。命名空间命名空间定义了标识符的可见范围。一般来说,如果我们需要对外调用resmgr中的类和接口,就需要在类和接口上加上export关键字。但是resmgr在DevEco中找不到任何提示。推测对于DevEco来说,在namespace中使用export是错误的。我们把@ohos.resourceManager.d.ts中命名空间中的export关键字全部去掉,重启DevEco,现在提示都出来了。我们可以看到命名空间中一般定义了以下类型。//enumerationenumDirection{...}//classclassConfiguration{...}//interfaceinterfaceResourceManager{...}//methodfunctiongetResourceManager(bundleName:string,callback:AsyncCallback);函数重载重载允许函数在接受不同数量或类型的参数时表现不同。在声明文件中,我们可以看到这样一个方法://获取当前应用的资源管理对象,使用回调的形式返回ResourceManager对象。导出函数getResourceManager(callback:AsyncCallback);//获取当前应用的资源管理对象,以Promise的形式返回ResourceManager对象。导出函数getResourceManager():Promise;其实我们可以看出这两个方法实现的是同一个能力,只是用法不同而已。下面是所有声明文件中随处可见的两个接口:mgr)=>{//成功时,错误返回undefinedif(error!=null){console.log("erroroccurs"+error);return;}console.log("mgrready")});CallgetResourceManager():PromiseresourceManager.getResourceManager().then(mgr=>{console.log("mgrready")}).catch(error=>{console.log("erroroccurs"+error);});//或者试试{letmgr=awaitresmgr.getResourceManager()}catch(error){console.log("erroroccurs"+error);}basic.d.ts在这个文件中定义了几个常用接口exportinterfaceCallback{(数据:T):void;}exportinterfaceErrorCallback{(err:T):void;}exportinterfaceAsyncCallback{(err:BusinessError,data:T):void;}export接口BusinessError分机结束error{code:number;}看@ohos.bundle.d.ts文件//importbasicdeclarationinterfaceimport{AsyncCallback,Callback}from'./basic';...//声明方法functiongetBundleInfo(bundleName:字符串,bundleFlags:数字,回调:AsyncCallback):无效;添加DevEco的声明文件OpenHarmony支持显示设备属性@ohos.display,但是没有添加显示的声明文件,所以我们自己写一个@ohos.display。d.ts文件。首先在【OpenHarmonySDK文件夹】\ets\3.1.0.0\api\common新建文件@ohos.display.d.ts。导出一个命名空间displaydeclarenamespacedisplay{}exportdefaultdisplay;通过前面的使用测试,我们发现OpenHarmony只支持display的getDefaultDisplay方法,返回一个Promise形式的Display对象。Display对象只支持两个可读属性width和height。界面显示{只读宽度:数字;readonlyheight:number;}getDefaultDisplay方法定义functiongetDefaultDisplay():Promise;然后完成@ohos.display.d.tsdeclarenamespacedisplay{functiongetDefaultDisplay():Promise;界面显示{只读宽度:数字;只读高度:数字;}}导出默认显示;保存并重启DevEco。注意:不要直接复制HarmonyOSSDK的@ohos.display.d.ts文件,OpenHarmony太多不支持。js开发需要在【OpenHarmonySDK文件夹】\js\3.1.0.0\api\phone下添加@ohos.display.d.ts文件现在错误没有了,我们用API看看。提示出来了~试试在开发板上打印分辨率:display.getDefaultDisplay().then(dis=>{console.log('[DEMO]width:'+dis.width)console.log('[DEMO]height:'+dis.height)})更多内容请访问:与华为官方共建的鸿蒙技术社区https://harmonyos.51cto.com