当前位置: 首页 > news >正文

「前端+鸿蒙」鸿蒙应用开发-TS接口-特殊用途

在 TypeScript 中,接口除了定义对象的结构之外,还有一些特殊用途,这些用途使得接口成为一种灵活的工具,用于提高代码的可维护性和可扩展性。

TS快速入门-接口-特殊用途

1. 定义函数类型

接口可以用来定义函数的类型,这在处理回调函数或高阶函数时非常有用。

interface AddFunction {(x: number, y: number): number;
}let add: AddFunction;
add = (x, y) => x + y;console.log(add(2, 3)); // 输出 5
2. 索引签名

接口可以包含索引签名,这允许你定义对象的索引类型,常用于数组或对象字面量。

interface StringArray {[index: number]: string;
}let fruits: StringArray = ["Apple", "Banana", "Cherry"];
console.log(fruits[1]); // 输出 "Banana"
3. 类型别名

接口可以作为类型别名使用,为一组特定的数据类型定义一个名称。

interface Point {x: number;y: number;
}let point: Point = { x: 10, y: 20 };
4. 构造函数签名

接口可以用来描述构造函数的形状,这在继承或多态时非常有用。

interface PersonConstructor {new (name: string): Person;
}interface Person {name: string;
}class Student implements PersonConstructor {constructor(public name: string) {}
}let student = new Student("Alice");
console.log(student.name); // 输出 "Alice"
5. 用于命名的构造函数

接口可以包含命名的构造函数,这允许你定义一个对象的特定方法的类型。

interface Circle {radius: number;calculateArea: () => number;
}let circle: Circle = {radius: 10,calculateArea: () => Math.PI * this.radius * this.radius
};console.log(circle.calculateArea()); // 输出 314.159...
6. 混合类型

接口可以用于定义混合类型,即一个对象可以同时具有多种类型的特性。

interface Clickable {click(): void;
}interface Draggable {drag(): void;
}class UIElement implements Clickable, Draggable {click() {console.log("Clicked!");}drag() {console.log("Dragging...");}
}

示例代码

以下是一个综合示例,展示了接口的特殊用途:

// 定义函数类型接口
interface StringProcessor {(input: string): string;
}// 使用接口作为函数类型
let toUpperCaseProcessor: StringProcessor;
toUpperCaseProcessor = (input) => input.toUpperCase();console.log(toUpperCaseProcessor("hello")); // 输出 "HELLO"// 索引签名接口
interface NumberDictionary {[index: number]: number;
}// 使用索引签名接口
let numbers: NumberDictionary = [1, 2, 3, 4];
console.log(numbers[2]); // 输出 3// 构造函数签名接口
interface Person {readonly name: string;
}interface PersonConstructor {new (name: string): Person;
}class Student implements PersonConstructor {readonly name: string;constructor(name: string) {this.name = name;}
}let student = new Student("Bob");
console.log(student.name); // 输出 "Bob"// 混合类型接口
interface ClickableDroppable {click(): void;drop(): void;
}class Button implements ClickableDroppable {click() {console.log("Button clicked!");}drop() {console.log("Button dropped!");}
}let button = new Button();
button.click();
button.drop();

接口在 TypeScript 中的特殊用途,包括定义函数类型、索引签名、类型别名、构造函数签名、命名的构造函数以及混合类型。这些特性使得接口成为 TypeScript 中一种非常灵活和强大的工具。

相关文章:

「前端+鸿蒙」鸿蒙应用开发-TS接口-特殊用途

在 TypeScript 中,接口除了定义对象的结构之外,还有一些特殊用途,这些用途使得接口成为一种灵活的工具,用于提高代码的可维护性和可扩展性。 TS快速入门-接口-特殊用途 1. 定义函数类型 接口可以用来定义函数的类型,…...

Centos7系统禁用Nouveau内核驱动程序【笔记】

在CentOS系统中,Nouveau是开源的NVIDIA显卡驱动程序,但它与NVIDIA的官方驱动程序NVIDIA Proprietary Driver存在兼容性问题。 如果你想要禁用Nouveau并使用NVIDIA官方驱动,可以按照以下步骤操作: 1、创建一个黑名单文件以禁用No…...

Vue 面试通杀秘籍

理论篇: 1. 说说对 Vue 渐进式框架的理解(腾讯医典) a) 渐进式的含义: 主张最少, 没有多做职责之外的事 b) Vue 有些方面是不如 React,不如 Angular.但它是渐进的,没有强主张, 你可以在原有…...

聚焦新版综合编程能力面试考查汇总

目录 一、业务性编程和广度能力考查 (一)基本定义 (二)必要性分析 二、高频考查样题(编程扩展问法) 考题1: 用java 代码实现一个死锁用例,说说怎么解决死锁问题?(高…...

[工具探索]英寸vs毫米下常见尺寸排版

文章目录 常见尺寸1. 照片尺寸2. 纸张尺寸3. 显示器和电视屏幕尺寸4. 手机屏幕尺寸5. 笔记本电脑屏幕尺寸6. 其他设备尺寸 换算公式换算方法常见照片尺寸对比表国际标准ISO(216)纸张尺寸 什么是英寸? 英寸(英语:inch&a…...

Mimio安装

mkdir -p /usr/local/develop/minio/bin mkdir -p /usr/local/develop/minio/bin wget https://dl.min.io/server/minio/release/linux-amd64/minio -O /usr/local/develop/minio/bin/minio 编辑脚本 启动脚本 vim /usr/local/develop/minio/start_minio.sh #!/bin/bash # 设…...

RawChat:优化AI对话体验,全面兼容GPT功能平台

文章目录 一、Rawchat简介1.1 RawChat的主要特性1.2 RawChat的技术原理简述 二、使用教程三、案例应用3.1 图片内容分析3.2 生图演示3.3 文档解析3.4 探索更多 四、小结 一、Rawchat简介 RawChat平台的诞生,其核心理念是降低用户访问类似ChatGPT这类先进AI服务的门…...

一文详解PaaS平台:机遇、挑战与新变革

随着信息化发展,数字技术与经济社会各个领域的融合逐渐深入,行业需求不断升级,逐渐呈现多样化、复杂性的态势。传统软件开发模式,耗时耗力,已经难以应对企业新形势下的业务需求。面对挑战,PaaS平台以其天然…...

Go每日一库之rotatelogs

介绍 Golang的rotatelogs库是一个用于日志轮转(log rotation)的库。日志轮转是一种常用的日志管理策略,它允许开发者将日志按照一定规则分割成多个文件,以便于管理和分析。通过使用rotatelogs库,开发者可以方便地实现…...

我的网络安全之路——一场诗意的邂逅

文章来源|MS08067 安全实验室 本文作者:tuooo 我的网络安全之路 一场诗意的邂逅 童年的星光中,我仰望着璀璨的荧屏,心怀对未知机器世界的浩瀚与好奇。那时的我,每每想到各种游戏的破解版本与工具,便会被技术…...

Android 中USB-HID协议实现

前言 所有通过USB连接android设备进行通讯的步骤都是大同小异:查询usb设备列表 ——>匹配对应的设备类型(如productid , vendorId)等——>连接usb设备,找到连接通讯的节点——>配置通讯信息,进行通讯。以上是…...

学习AI 机器学习,深度学习需要用到的python库

学习人工智能(AI)时,Python是最流行的编程语言之一。以下是一些常用的Python库和工具,它们可以帮助你入门并深入学习AI和机器学习: 数据处理和分析库 NumPy: 用于处理大型多维数组和矩阵运算,并提供数学函…...

计算机网络 期末复习(谢希仁版本)第8章

元文件就是一种非常小的文件,它描述或指明其他文件的一些重要信息。这里的元文件保存了有关这个音频/视频文件的信息。 10. 流式:TCP;流式实况:UDP。...

abap 多线程运行demo

SAP 提供多种多线程的方法去优化程序的执行效率 1.分别执行多个job 2.Call function STARTING NEW TASK 3.直接使用SAP 提供的SPTA 框架函数:SPTA_PARA_PROCESS_START_2 本次,我们着重来介绍一下三种方法中函数的使用方法 获取空闲线程数:SPBT_INITIALIZE *&------…...

python科研做图系列之时序图的绘制——对比折线图

参考知乎 折线图 我需要从两个不同的excel都读取第一列作为时间列,第二列作为编码列。 在同一张图上画出两条时间序列的折线图 横坐标是分钟,纵坐标是编码 帮我画的好看一些,记得解决中文乱码问题 英文版折线图 ,先搞个英文版,导师要求中文的话,再换成中文版 impor…...

数字信号处理:关于锁存器Latch的发现

关于锁存器的发明,有下面一段伪历史,所谓伪历史,就是我不想去考证发明人是否有这样一条思路,但是这肯定算是一个思路。 伪历史是这样开始的,人们先发明了反相器,就如下图所示。 接着,人们开始考…...

C++ | Leetcode C++题解之第140题单词拆分II

题目&#xff1a; 题解&#xff1a; class Solution { private:unordered_map<int, vector<string>> ans;unordered_set<string> wordSet;public:vector<string> wordBreak(string s, vector<string>& wordDict) {wordSet unordered_set(w…...

JVM (四)GC过程

一。概述 程序计数器、虚拟机栈、本地方法栈都是随线程生灭&#xff0c;栈帧随着方法的进入和退出做入栈和出栈操作&#xff0c;实现了自动的内存清理&#xff0c;因此&#xff0c;内存垃圾回收主要集中于Java堆和方法区中。 GC整体流程示意图&#xff1a; ① 年轻代对象的移动…...

Web前端自学初中:探索与突破

Web前端自学初中&#xff1a;探索与突破 在数字化时代&#xff0c;Web前端技术成为了连接用户与互联网世界的桥梁。对于初中生而言&#xff0c;自学Web前端不仅可以培养他们的逻辑思维能力&#xff0c;还能为他们打开一扇通往技术世界的大门。然而&#xff0c;这一过程中充满了…...

音视频开发26 FFmpeg 时间问题整理

time_base 、pts、dts、duration time_base&#xff1a;时间基&#xff0c;所谓时间基表示的就是每个刻度是多少秒 &#xff0c;例如 如果把1秒分为25等份&#xff0c;你可以理解就是一把尺&#xff0c;那么每一格表示的就是1/25秒。此时的time_base{1&#xff0c;25} &#xf…...

Android TTS自定义开发:从0到1打造专属语音引擎

Android TTS自定义开发&#xff1a;从0到1打造专属语音引擎 【免费下载链接】tts-server-android 这是一个Android系统TTS应用&#xff0c;内置微软演示接口&#xff0c;可自定义HTTP请求&#xff0c;可导入其他本地TTS引擎&#xff0c;以及根据中文双引号的简单旁白/对话识别朗…...

告别回调地狱:用Qt信号与槽重构你的第一个GUI应用(Qt6/C++实战)

重构GUI应用&#xff1a;Qt信号与槽的工程化实践 在传统C GUI开发中&#xff0c;我们常常陷入回调函数嵌套的泥潭——按钮点击触发事件处理函数&#xff0c;函数内部又调用其他模块&#xff0c;最终形成难以维护的"面条式代码"。Qt的信号与槽机制为这一困境提供了优雅…...

LM339比较器实战:手把手教你搭建电池电压监测电路(附电路图)

LM339比较器实战&#xff1a;手把手教你搭建电池电压监测电路&#xff08;附电路图&#xff09; 1. 为什么选择LM339作为电池监测核心器件&#xff1f; 在电子设计领域&#xff0c;电压监测是保障设备稳定运行的基础功能之一。LM339作为一款经典的四路电压比较器&#xff0c;…...

【水果分类】基于GUI计算机视觉和前馈神经网络自动水果分类系统附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室&#x1f447; 关注我领取海量matlab电子书和…...

咱们今天聊点干货——用MATLAB玩转储能电站和微电网的协同优化。这玩意儿听起来高大上,实操起来其实挺有意思。先看上层优化的核心代码段

MATLAB代码&#xff1a;基于储能电站服务的冷热电多微网系统双层优化 MATLAB代码&#xff1a;基于储能电站服务的冷热电多微网系统双层优化|||配置 关键词&#xff1a;储能电站 共享储能电站 冷热电多微网 双层优化配置 参考文档&#xff1a;《基于储能电站服务的冷热电多微…...

蓝牙UUID:从标准服务到自定义通信的密钥

1. 蓝牙UUID&#xff1a;智能设备的身份证 想象一下你走进一个满是蓝牙设备的房间——智能手环在测量心率&#xff0c;温湿度计在报告数据&#xff0c;智能灯泡等待你的指令。这些设备如何知道该响应哪个请求&#xff1f;答案就藏在那个128位的UUID&#xff08;通用唯一识别码…...

零基础如何选择PMP和软考?2025年考证避坑指南(含最新政策解读)

零基础如何选择PMP和软考&#xff1f;2025年考证避坑指南&#xff08;含最新政策解读&#xff09; 项目管理领域的证书选择一直是职场人士关注的焦点。PMP和软考作为两大主流认证&#xff0c;各自拥有独特的价值定位和适用场景。对于零基础考生而言&#xff0c;如何在2025年这…...

OpenClaw+nanobot自动化测试:24小时监控网站可用性

OpenClawnanobot自动化测试&#xff1a;24小时监控网站可用性 1. 为什么需要自动化网站监控 作为个人站长&#xff0c;我经常遇到这样的困扰&#xff1a;半夜网站突然宕机&#xff0c;直到第二天收到用户反馈才发现问题。传统监控方案要么价格昂贵&#xff0c;要么配置复杂&a…...

ReactPy虚拟DOM终极指南:Python如何高效更新网页内容

ReactPy虚拟DOM终极指南&#xff1a;Python如何高效更新网页内容 【免费下载链接】reactpy Its React, but in Python 项目地址: https://gitcode.com/gh_mirrors/re/reactpy ReactPy作为Python领域的创新框架&#xff0c;让开发者能够使用Python语法构建交互式Web界面&…...

Qwen2.5-VL视觉定位模型优化升级:GPU加速、批量处理、提示词技巧

Qwen2.5-VL视觉定位模型优化升级&#xff1a;GPU加速、批量处理、提示词技巧 1. 视觉定位技术概述 视觉定位&#xff08;Visual Grounding&#xff09;是计算机视觉领域的一项关键技术&#xff0c;它能够根据自然语言描述在图像中精确定位目标对象。这项技术在智能相册管理、…...