当前位置: 首页 > 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…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

Android15默认授权浮窗权限

我们经常有那种需求&#xff0c;客户需要定制的apk集成在ROM中&#xff0c;并且默认授予其【显示在其他应用的上层】权限&#xff0c;也就是我们常说的浮窗权限&#xff0c;那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

python爬虫——气象数据爬取

一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用&#xff1a; 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests&#xff1a;发送 …...

十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建

【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...

鸿蒙(HarmonyOS5)实现跳一跳小游戏

下面我将介绍如何使用鸿蒙的ArkUI框架&#xff0c;实现一个简单的跳一跳小游戏。 1. 项目结构 src/main/ets/ ├── MainAbility │ ├── pages │ │ ├── Index.ets // 主页面 │ │ └── GamePage.ets // 游戏页面 │ └── model │ …...

云安全与网络安全:核心区别与协同作用解析

在数字化转型的浪潮中&#xff0c;云安全与网络安全作为信息安全的两大支柱&#xff0c;常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异&#xff0c;并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全&#xff1a;聚焦于保…...

Monorepo架构: Nx Cloud 扩展能力与缓存加速

借助 Nx Cloud 实现项目协同与加速构建 1 &#xff09; 缓存工作原理分析 在了解了本地缓存和远程缓存之后&#xff0c;我们来探究缓存是如何工作的。以计算文件的哈希串为例&#xff0c;若后续运行任务时文件哈希串未变&#xff0c;系统会直接使用对应的输出和制品文件。 2 …...

2025 后端自学UNIAPP【项目实战:旅游项目】7、景点详情页面【完结】

1、获取景点详情的请求【my_api.js】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http(/login/getWXSessionKey, {code,avatar}); };//…...