autojs声明文件

简介: autojs声明文件

声明文件是什么


声明文件是typescript中的概念, 主要用来描述变量类型,


声明文件不包含实现,它只是类型声明


声明文件的服务对象是谁?


声明文件, 去描述js文件中的变量类型, 给ts用


autojs需要声明文件吗


vscode会把声明文件的内容作为代码提示., 这样就不用查文档了, 这是好处之一;


之前的代码提示是通过代码片段来实现的,


现在的插件把代码片段文件删掉了, 取而代之的就是.d.ts文件


vscode的autojs插件文件路径


C:\Users\Administrator.vscode\extensions\hyb1996.auto-js-pro-ext-1.3.2


从哪里获取autojs的声明文件


打开vscode,按以下步骤操作:


  • 按F1
  • 输入autojsv8
  • 点击Auto.js Pro: 新建V8 API项目(New V8 API Projcet)
  • 选择文件夹, 用来放置项目文件
  • 声明文件就出现了
  • node_modules@autojs\types-pro8\index.d.ts
  • 需要一个tsconfig.json文件, 来指明声明文件在哪里, 字段是: typeRoots


声明文件index.d.ts


d.ts大名叫TypeScript Declaration File


查看该文件, 看看有哪些声明格式:


  • declare module '__app__' { ... }
  • declare var app: AutoJs.App;
  • declare function sleep(n: number);
  • declare namespace AutoJs { ... }


并且基本都加了global, 表示这是一个全局声明.


那么我们在vscode中直接写全局声明过的变量, 鼠标放上去, 就可以显示代码提示了,


就不用查文档了呢, 每次节约10秒钟, 算算能节约多长时间.


从上到下依次是


  • 声明模块
  • 声明变量
  • 声明函数
  • 声明命名空间


module和namespace看着好像没什么区别啊, 我就查了一下, 官方文档的解释如下:


A note about terminology: It’s important to note that in TypeScript 1.5, the nomenclature has changed. “Internal modules” are now “namespaces”. “External modules” are now simply “modules”, as to align with ECMAScript 2015’s terminology, (namely that module X { is equivalent to the now-preferred namespace X {).


也就是说module X 等同于 namespace X, 我理解的对不对?

有错请指正.



怎么声明一个函数


我们来看看这个images.save是怎么声明的?


images.save(image, path[, format = "png", quality = 100])


首先拆解函数


  • 他属于images这个对象
  • 他的名字叫save
  • 他有4个参数, 2个必填参数, 2个默认参数


然后我们在vscode中输入images.save,


鼠标放到images上面, 可以看到以下代码提示



鼠标放到save上面, 可以看到以下代码提示


按住ctrl, 再点击images可以看到声明内容

declare var images: AutoJs.Images;


按住ctrl, 再点击save可以看到声明内容, 这就是上面图片中代码提示的全部内容

/**
* 把图片image以PNG格式保存到path中。如果文件不存在会被创建;文件存在会被覆盖。
* ```
* // 把图片压缩为原来的一半质量并保存
* var img = images.read("/sdcard/1.png");
* images.save(img, "/sdcard/1.jpg", "jpg", 50);
* app.viewFile("/sdcard/1.jpg");
* ```
* @param image 图片
* @param path 路径
* @param format 图片格式,可选的值为:
* * `png`
* * `jpeg`/`jpg`
* * `webp`
* @param quality 图片质量,为0~100的整数值
**/
  save(image: Image, path: string, format?: "png" | "jpg" | "jpeg" | "webp", quality?: number);


save四个参数中, path, format, quality的参数类型都是基本类型, string, number, 可选参数用 ?: 表示,


save方法的层级

declare module '__images__' {
    global {
        namespace AutoJs {
            interface Images {
                save( ... );


第一个参数是Image, 我们按住Ctrl, 点击Image看看跳转到哪里了?


Image

class Image {
  getWidth(): number;
  readonly width: number;
  getHeight(): number;
  readonly height: number;
  saveTo(path: string);
  pixel(x: number, y: number): number;
  recycle();
  isRecycled(): boolean;
  readonly mat?: Mat;
  readonly bitmap?: any;
}


Image层级

declare module '__images__' {
  global {
    namespace AutoJs {
      class Image {


图色的声明就放到图色模块里面, 再声明为global, 归属于命名控件AutoJs


Image这个类是专门为了save这个方法的第一个参数来编写的,


save的参数类型基本都是基本类型, 除了Mat, 点击Mat看看在哪里声明的?

type Mat = any;


any, 变量类型终结者.

type用于声明一个变量类型Mat, 其真实类型是any.

一些声明例子

declare var name: string;
declare var age: number;
declare var id: number;
declare const SMALL_TARGET: 1_0000_0000;
declare function getName(): string;
declare function getName(id: string): string;
declare function isSingleDog(name?: string): boolean;

声明模块

foo.d.ts

export let name: string;
export function getNameURL2(num888888: string): string;
namespace student {
  export let name: string;
  export let age: number;
  export function doWhat(what: string): string;
}


foo.js

let name = "yashu666";
function getNameURL2(num) {
  return "numberURL2 is " + num;
}
let student = {
  name: "lucy",
  age: "16",
  doWhat: function (info) {
    console.log("student is doing " + info);
  },
};
module.exports = { name, getNameURL2, student };


main.ts

import URL2 from "./foo/foo";
console.log(URL2);
console.log(URL2.name);
URL2.getNameURL2;
URL2.student.doWhat("homework");

注意


  • foo.d.ts和foo.js要在同一个文件夹
  • main.ts中的代码提示的是foo.d.ts中的内容
  • main.ts运行的是foo.js中的内容

名人名言


思路是最重要的, 其他的百度, bing, stackoverflow, github, 安卓文档, autojs文档, 最后才是群里问问
--- 牙叔教程


声明


部分内容来自网络
本教程仅用于学习, 禁止用于其他用途


相关文章
|
存储 运维 数据处理
AIGC浪潮对数据中心基础设施发展的影响
【1月更文挑战第19天】AIGC浪潮对数据中心基础设施发展的影响
395 1
AIGC浪潮对数据中心基础设施发展的影响
|
Android开发
autojs下拉刷新
牙叔教程 简单易懂
1141 0
|
Android开发
autojs用ConnectivityManager实现网络监听
autojs用ConnectivityManager实现网络监听
1398 0
|
数据采集 监控 物联网
MQTT协议在智能制造中的应用案例与效益分析
【6月更文挑战第8天】MQTT协议在智能制造中的应用案例与效益分析
503 1
|
搜索推荐 安全 数据安全/隐私保护
构建高效网站后台会员管理系统:实战指南与代码示例
【7月更文挑战第5天】在当今的互联网时代,几乎每个网站或应用程序都需要一个强大的会员管理系统来维护用户信息、权限控制以及个性化体验。一个设计良好的会员管理系统不仅能够提升用户体验,还能增强数据安全性和运营效率。本文将深入探讨如何从零开始构建一个网站后台会员管理系统,涵盖系统设计思路、关键技术选型、功能模块实现,以及实战代码示例。
1239 3
|
11月前
|
缓存 API PHP
PHP性能优化:从基础到高级策略####
深入探索PHP性能优化的多维度策略,本文旨在揭示通过代码优化、配置调整与现代最佳实践相结合的方式,显著提升PHP应用的响应速度和资源利用率。不涉及传统摘要细节,直接聚焦于技术深度与实用技巧,引领读者踏上PHP性能调优的高效之旅。 ####
|
数据采集 JavaScript Shell
AutoJs4.1.0 基本介绍
AutoJs4.1.0 基本介绍
1060 1
|
Java Spring
Spring的Bean生命周期中@PostConstruct注解
【8月更文挑战第3天】在Spring框架中,`@PostConstruct`注解标示Bean初始化完成后立即执行的方法。它在依赖注入完成后调用,适用于资源加载、属性设置等初始化操作。若方法中抛出异常,可能影响Bean初始化。与之对应,`@PreDestroy`注解的方法则在Bean销毁前执行,用于资源释放。
367 0
|
存储 传感器 大数据
大数据定义详解
【4月更文挑战第9天】大数据,超常规工具处理的海量(TB-PB-EB)多样化数据,包含结构化与非结构化信息,生成速度快且真实性高。关键在于专业化处理以实现数据增值,依赖于计算机科学、统计学的理论与云计算的支撑。大数据分析提供决策支持,驱动业务创新和社会治理改善,与云计算紧密关联,共同塑造新兴领域。
671 4
|
Kubernetes 网络协议 Perl
k8s Failed to create pod sandbox: open /run/systemd/resolve/resolv.conf: no such file or directory
k8s Failed to create pod sandbox: open /run/systemd/resolve/resolv.conf: no such file or directory
903 0

热门文章

最新文章