HarmonyOS 鸿蒙Next中关于API方法的方法签名格式问题

HarmonyOS 鸿蒙Next中关于API方法的方法签名格式问题 如题,我想问一下,鸿蒙API方法签名的格式规范文档中有哪里说明了吗,只看他给的

onBeforeDownload

onBeforeDownload(callback: Callback<WebDownloadItem>): void

fileManagerService.deleteToTrash

deleteToTrash(uri: string): Promise<string> 第一个写代码的时候写的是delegate.onBeforeDownload,第二个就是拼接的fileManagerService.deleteToTrash(uri: string): Promise<string>这样写,有没有具体的一个说明规范呢


更多关于HarmonyOS 鸿蒙Next中关于API方法的方法签名格式问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

9 回复

有规范的,但它本质上不是“鸿蒙特有语法”,而是 ArkTS/TypeScript 的 API 文档签名写法 + 模块导出形式(namespace / class / interface / instance) 的组合。你看到的两种写法差异,来自“这个方法属于谁”。


1)文档里 xxx(…): Promise<T> 这种“方法签名”表示什么?

这就是 TypeScript 的函数/方法类型声明格式:

  • deleteToTrash(uri: string): Promise<string>
    • 参数:uri 类型 string
    • 返回:Promise<string>
  • onBeforeDownload(callback: Callback<WebDownloadItem>): void
    • 参数:callback 类型是一个回调函数(泛型参数是 WebDownloadItem
    • 返回:void(不返回值)

这只是在说明“怎么调用、传什么参数、返回什么类型”,不是要求你代码里照抄冒号那部分。


2)为什么有的写 delegate.onBeforeDownload(...),有的写 fileManagerService.deleteToTrash(...)

关键是:方法属于对象实例还是模块/命名空间导出的函数

A. delegate.onBeforeDownload(...):方法属于“某个对象实例”

delegate 是你代码里拿到的一个对象(可能是 Web 组件的 delegate、controller、listener 等),onBeforeDownload 是这个对象上的方法,所以调用是:

delegate.onBeforeDownload((item) => { ... })

文档通常会写成: onBeforeDownload(callback: Callback<WebDownloadItem>): void 因为在类/接口里描述成员方法时,默认不写“所属对象名”。

B. fileManagerService.deleteToTrash(...):方法是“模块导出对象”的成员

fileManagerService 本身就是一个模块导出的对象/命名空间(你通过 import 得到它),deleteToTrash 是其成员函数,所以调用是:

fileManagerService.deleteToTrash(uri).then(...)

文档为了说明“这个方法属于哪个模块/哪个命名空间”,会在标题或分组处写: fileManagerService.deleteToTrash 然后在下面给签名: deleteToTrash(uri: string): Promise<string>


3)你提到的“fileManagerService.deleteToTrash(uri: string): Promise<string/>

注意:冒号类型标注那部分只出现在文档/声明文件(.d.ts)里,调用时不要写类型:

✅ 正确调用:

fileManagerService.deleteToTrash(uri)

❌ 不会这么写:

fileManagerService.deleteToTrash(uri: string): Promise<string>

4)如何快速判断“该怎么写”?

看文档的“导入模块/Modules to Import”:

  • 如果导入是:
    import fileManagerService from '[@ohos](/user/ohos).xxx'
    
    import { fileManagerService } from '[@kit](/user/kit).xxx'
    
    那通常就是 fileManagerService.xxx() 这种。
  • 如果文档说“某某类/接口/对象的回调/成员方法”,那就是你要先拿到实例(如 delegate/controller/session),再 instance.xxx()

更多关于HarmonyOS 鸿蒙Next中关于API方法的方法签名格式问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


HarmonyOS 没有开源,但是可以参考 OpenHarmony API 设计规范 以及 OpenHarmony应用TS&JS编程指南。另外,开发文档中有 ArkTS编程规范,以提高代码的规范性、安全性和性能。

HarmonyOS的社区里有很多技术大牛分享经验,学到了很多有用的知识。

onBeforeDownload 是 WebDownloadDelegate 实例方法,所以写 delegate.onBeforeDownload(…)

deleteToTrash 是 fileManagerService 对象的方法,所以写 fileManagerService.deleteToTrash(uri)

尊敬的开发者您好,关于这两个方法可以参考文档:

onBeforeDownload

fileManagerService.deleteToTrash

有没有具体的一个规范呢,只能一个一个看吗

需要对照API文档进行学习哦

鸿蒙Next的API方法签名采用TypeScript风格,格式为:方法名(参数名: 参数类型, ...): 返回值类型。可选参数用?标记,泛型使用<T>。例如:create(data: Record<string, string>): Promise<void>。部分API使用装饰器修饰,但签名仍遵循上述规则。

HarmonyOS Next 的 API 参考文档中给出的方法签名遵循标准的函数类型声明格式,比如 onBeforeDownload(callback: Callback<WebDownloadItem>): void 表示这是一个方法声明。实际代码里写成 delegate.onBeforeDownload,是因为文档展示的只是方法本身,而调用时需要通过对应的对象实例来访问。同理,fileManagerService.deleteToTrash(uri: string): Promise<string> 是静态方法或通过模块名暴露的方法,所以可直接拼接模块名调用。这种“类名/对象名 + 方法签名”的书写方式并非单独成规,而是面向对象接口使用的通用实践,在 API 参考的“接口声明”和示例代码中可以观察到此惯例。如需查找明确说明,可查看官方文档的《API 参考》前言部分,以及“TypeScript 声明文件”中接口与类方法的书写规则。

回到顶部