「前端+鸿蒙」鸿蒙应用开发-TS接口-语法多态

在 TypeScript 中,接口(Interfaces)是一种强大的方式来定义对象的结构,它们用于类型检查和确保对象符合特定的结构。接口也可以用于类,实现类似多态的特性。以下是 TypeScript 中接口的语法和多态的快速入门指南。

TS快速入门-接口-语法

定义接口

接口用于定义对象的结构,可以包括属性、函数、可选属性等:

interface Person {name: string;age: number;speak?: () => void; // 可选属性
}
实现接口

类可以通过 implements 关键字实现一个或多个接口:

class Student implements Person {name: string;age: number;constructor(name: string, age: number) {this.name = name;this.age = age;}speak(): void {console.log(`My name is ${this.name} and I am studying TypeScript.`);}
}
接口继承

接口可以继承其他接口,类似于类继承:

interface Animal {name: string;makeSound(): void;
}interface Dog extends Animal {breed: string;
}class Labrador implements Dog {name: string;breed: string;constructor(name: string, breed: string) {this.name = name;this.breed = breed;}makeSound(): void {console.log('Bark!');}
}
多态

多态允许同一个接口在不同的上下文中有不同的实现:

interface Animal {makeSound(): void;
}class Dog implements Animal {makeSound(): void {console.log('Woof!');}
}class Cat implements Animal {makeSound(): void {console.log('Meow!');}
}function makeAnimalSound(animal: Animal): void {animal.makeSound(); // 多态的使用,实际调用的方法取决于 animal 的类型
}let dog = new Dog();
let cat = new Cat();makeAnimalSound(dog); // 输出: Woof!
makeAnimalSound(cat); // 输出: Meow!

示例代码

以下是一个使用 TypeScript 接口的示例,展示了接口的基本语法和多态的使用:

// 定义接口
interface Greeting {greet(): void;
}// 实现接口的类
class Person implements Greeting {name: string;constructor(name: string) {this.name = name;}greet(): void {console.log(`Hello, my name is ${this.name}!`);}
}// 另一个实现接口的类
class Robot implements Greeting {model: string;constructor(model: string) {this.model = model;}greet(): void {console.log(`Hello, I am ${this.model}!`);}
}// 使用接口实现多态的函数
function introduce(greeting: Greeting): void {greeting.greet(); // 调用实现 Greeting 接口的 greet 方法
}// 创建 Person 和 Robot 的实例
let person = new Person('Alice');
let robot = new Robot('Bender');// 通过接口引用调用多态函数
introduce(person); // 输出: Hello, my name is Alice!
introduce(robot);  // 输出: Hello, I am Bender!

TypeScript 中接口的语法和多态的使用。接口为定义对象和类的结构提供了一种灵活的方式,而多态则允许函数对不同类型的对象执行不同的操作,这使得代码更加通用和可扩展。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/26032.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

常用的通信协议

最近在做项目,用到了一些通信协议,这里详细整理一下相关的通信协议,方便以后查阅。 常用的通信协议 单工 半双工 全双工单工通信(Simplex Communication)半双工(Half-duplex Communication)全双工(Full-dup…

速卖通如何放关联?

大家都知道,想要进行多账号操作必须一再小心,否则会有很大的关联风险,而账号关联所带来的后果是卖家绝对不能轻视的,严重的话会导致封号,这样一来自己前期的辛苦运营就全都打水漂了,因此防关联很重要&#…

Python框架scrapy有什么天赋异禀

Scrapy框架与一般的爬虫代码之间有几个显著的区别,这些差异主要体现在设计模式、代码结构、执行效率以及可扩展性等方面。下面是一些关键的不同点: 结构化与模块化: Scrapy:提供了高度结构化的框架,包括定义好的Spider…

MySQL—多表查询—小结

一、引言 前面的博客已经全部学习完了关于多表查询。接下来对多表查询进行一个小结。 (1)多表查询主要是讲了两个方面 多表关系 (不管业务关系如何的复杂,最终多表的关系基本上可以分为三类) "一对多"、&qu…

大数据技术Hbase列数据库——topic3

目录 启动Hadoop启动HbaseHbase常用Shell命令基本命令关于表的操作增删改查询 启动Hadoop 1.到Hadoop安装目录下输入命令 sbin/start-all.sh[rootlocalhost hadoop-2.7.1]# sbin/start-all.sh This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh Starti…

《Vue》系列文章目录

Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建,并提供了一套声明式的、组件化的编程模型,帮助你高效地开发用户界面。无论是简单还是复杂的界面,Vue 都可以…

载波相移CPS-SPWM调制方法的simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 载波相移CPS-SPWM调制方法的simulink建模与仿真,载波相移PWM方法: 2.系统仿真结果 单极倍频 釆用 调制波 反相 法 , 基本调制原理为 &…

Golang 避坑指南

文章目录 1. Channel 与 Goroutine 泄露1.1 发送不接收1.2 接收不发送1.3 nil channel2. 跳出 for-switch 或 for-select 3.for 迭代变量3.1 闭包中的for迭代变量3.2 for range 迭代变量 4. 循环内的 defer5.defer 函数的参数值6.nil interface 和 nil interface 值7.结构体指针…

【Bazel入门与精通】 rules之属性

https://bazel.build/extending/rules?hlzh-cn#attributes Attributes An attribute is a rule argument. Attributes can provide specific values to a target’s implementation, or they can refer to other targets, creating a graph of dependencies. Rule-specifi…

B3810 [语言月赛 202307] 扶苏和串

[语言月赛 202307] 扶苏和串 题目背景 众所周知,每个月入门赛的字符串题都是扶苏来枚举 idea 出出来的。 题目描述 给定一个 01 字符串 s s s,你可以任选 s s s 的一个非空子串,把这个子串在 s s s 中翻转一次。 问你能得到字典序最小…

R语言:使用 stringr 包进行字符串处理和正则表达式匹配

在 R 编程中,字符串处理和正则表达式匹配是常见的需求,而 stringr 包提供了强大的工具来简化这些操作。本文将介绍 stringr 包的基础用法,并结合正则表达式的相关内容,帮助你高效处理字符串数据。 字符串基础 创建字符串 在 R …

大模型训练数据白皮书深度解读

摘要 随着人工智能技术的飞速发展,大模型在各个领域的应用日益广泛。《大模型训练数据白皮书》为我们提供了对大模型训练数据重要性的深刻理解,本文将深度解读白皮书的主要内容,探讨大模型训练数据的关键要素、面临的挑战与未来发展趋势。 …

金融量化分析开源工具:TuShare

TuShare:一站式金融数据解决方案,让量化分析触手可及- 精选真开源,释放新价值。 概览 TuShare,是Github社区上一个专为金融量化分析师和数据爱好者设计的开源工具,提供了从数据采集、清洗加工到数据存储的全流程服务。…

缓存更新策略中级总结

背景 看到好些人在写更新缓存数据代码时,先删除缓存,然后再更新数据库,而后续的操作会把数据再装载的缓存中。然而,这个是逻辑是错误的。试想,两个并发操作,一个是更新操作,另一个是查询操作…

构建大语言模型友好型网站

以大语言模型为代表的AI 技术迅速发展,将会影响原有信息网络的方式。其中一个明显的趋势是通过chatGPT 对话代替搜索引擎和浏览器来获取信息。 互联网时代,主要是通过网站(website)提供信息。网站主要为人类阅读的方式构建的。主要…

高通Android开关机动画踩坑简单记录

1、下面报错有可能是selinux的原因 Read-only file system 2、接着push 动画 reboot之后抓取logcat出现 以下报错。看着大概意思像是压缩格式有问题。 3、于是重新压缩一下报错没有再出现 ,压缩格式默认是标准,这里必须要改成存储格式哈 4、修改之后重新…

GitHub工程git merge出现冲突处理方式

GitHub工程git merge出现冲突处理方式 1. 源由2. 冲突解决2.1 触发合并冲突2.2 查看冲突状态2.3 打开冲突文件2.4 解决冲突2.5 标记冲突已解决2.6 继续合并2.7 检查合并结果 3. 示例 1. 源由 在产品研发中,常见的技术动作就是merge,而这个操作通常有两种…

Mysql基础 - 事务

Mysql基础 - 事务 文章目录 Mysql基础 - 事务1 事务简介2 事务操作2.1 控制事务一2.2 控制事务二 3 事务四大特性4 并发事务问题5 事务隔离级别 1 事务简介 事务是一组操作的集合,他是一个不可分割的工作单位,事务会把所有操作作为一个整体一起向系统提…

tcp协议的面向字节流介绍,粘包问题(解决的本质)

目录 面向字节流 引入 介绍 比喻 处理数据 粘包问题 引入 介绍 解决的本质 面向字节流 引入 对于udp来说,它是面向数据报的 一旦要发送数据,因为没有发送缓冲区,且不需要维护连接,直接封装完报头就发出去了依靠报头中的udp长度字段,可以拆分出报文然后交付给上层一个…

解决Vue项目Network: unavailable的问题

在vscode使用 npm run serve 运行 Vue项目时发现一个问题,项目只能通过Local访问而不能通过Network访问,终端显示如下: 碰到这种情况的解决方法:在环境变量的path中添加“C:\Windows\System32\Wbem” 1.找到“环境变量”&#xf…