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

三、(补充)接口是对类的一部分行为的抽象

接口是对类的一部分行为的抽象

类类型

实现接口

为什么不是描述类呢?而是类一部分行为的抽象?

类中分为:静态部分(构造器)、实例部分(类成员)。

  • 类成员:实例的属性、原型上的方法。
    • 接口就是为了修饰类成员
  • 静态部分:constructor
    • 构造函数是不能通过接口实现的,接口实现的是构造函数实例化的对象。

类的本质是构造函数,构造函数上没有类成员,所以接口不能描述类,而是说类实现的这个接口。

类实现的这个接口:接口描述属性,在类中去具体实现。

接口描述了类的公共部分

总结:修饰类需要写两个接口 + 一个函数:一个接口用来修饰类成员,一个接口用来修饰类构造函数本身,用一个函数把两者合并。

interface IPerson {name: string;sayName: (a: string) => void;
}interface IPersonCons {new (a: string): IPerson;hobby: string;sayHobby: (b: string) => void;
}class Person implements IPerson {name ='123';sayName(c: string) {console.log(this.name, c);}constructor(a:string) {this.name = a;};static hobby = '123';static sayHobby (b: string){console.log(this.hobby, b);}
}function createPerson(c:IPersonCons): IPerson{return new c('zhangsan');
}let person =  createPerson(Person);
console.log(person.name); //zhangsanperson.sayName('white'); //zhangsan white
person.sayName('white'); //zhangsan whiteconsole.log(Person.hobby); //'123'
Person.sayHobby('baskstball'); //'123 baskstball'

如果没有静态属性,函数可以怎么写?

interface IPerson {name: string;sayName: (a: string) => void;//简写上面:sayName();
}
class Person implements IPerson {name ='123';sayName(c: string) {console.log(this.name, c);}constructor(a:string) {this.name = a;};
}
//写法1
function createPerson(c:{new (a: string): IPerson;}): IPerson{return new c('zhangsan');
}
//写法2
function createPerson(c:new (a: string) => IPerson): IPerson{return new c('zhangsan');
}
//写法3
// 抽象泛型,T可以理解为一个泛型变量,属于类型变量,这里属于IPerson,接口继承接口,实现接口的抽象
function createPerson <T extends IPerson>(c:new (a: string) => T): T{return new c('zhangsan');
}

注意两个ts配置:

"strictNullChecks": true,                         /* When type checking, take into account 'null' and 'undefined'. */
"strictPropertyInitialization": true,             /* Check for class properties that are declared but not set in the constructor. */

接口继承接口

接口继承接口,相当于接口的拓展。

interface Shape {color: string;
}interface Square extends Shape {sideLength: number;
}let a:Square = {color: 'white',sideLength: 60
}

一个接口可以继承多个接口,创建出多个接口的合成接口。

interface Shape {color: string;
}interface PenStroke {penWidth: number;
}interface Square extends Shape, PenStroke{sideLength: number;
}let a:Square = {color: 'white',sideLength: 60,penWidth: 30
}

type是类型别名,给交叉类型赋别名

type ShapeAndPenStroke = Shape & PenStroke
interface Square1 extends ShapeAndPenStroke{sideLength: number;
}

交叉类型:两个都包括:Shape & PenStroke

联合类型:两个取其一:Shape | PenStroke

类型断言

清楚地知道一个实体的类型,在赋值时人为确定类型,不需要ts进行类型推断。

两种写法:

  • as类型

  • <类型>

interface Shape {color: string;
}interface PenStroke {penWidth: number;
}interface Square extends Shape, PenStroke {sideLength: number;
}// let square = <Square>{};
let square = {} as Square;
square.color = "blue";
square.sideLength = 10;
square.penWidth = 5.0;

混合类型

混合类型:一个接口中有函数、有属性

interface Counter {(start: number): string;interval: number;reset(): void;
}function getCounter(): Counter {let counter = <Counter>function (start: number) { };counter.interval = 123;counter.reset = function () { };return counter;
}let c = getCounter();
c(10);
c.reset();
c.interval = 5.0;

相关文章:

三、(补充)接口是对类的一部分行为的抽象

接口是对类的一部分行为的抽象 类类型 实现接口 为什么不是描述类呢&#xff1f;而是类一部分行为的抽象&#xff1f; 类中分为&#xff1a;静态部分&#xff08;构造器&#xff09;、实例部分&#xff08;类成员&#xff09;。 类成员&#xff1a;实例的属性、原型上的方…...

CIMCAI intellgent ship product applied by world top3 shipcompany

CIMCAI智慧船公司集装箱管理产品ceaspectusS™全球规模应用全球前三大船公司认可验箱标准应用落地全球港航人工智能AI独角兽 CIMCAI中集飞瞳CIMCAI Intellgent shipping product ceaspectusS ™which applied by the worlds top three shipping companiesGlobal port and shipp…...

媒体见面会怎么做?

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好媒体见面会是企业与媒体沟通的一种常见形式&#xff0c;以下是一些媒体见面会的建议&#xff1a;1&#xff0c;确定目标和主题&#xff1a;在媒体见面会前&#xff0c;企业应该确定目标和主题。这包括确定想要传达的信息、受…...

Nginx面试题一步到位

1.什么是Nginx&#xff1f; Nginx是一个 轻量级/高性能的反向代理Web服务器&#xff0c;用于 HTTP、HTTPS、SMTP、POP3 和 IMAP 协议。他实现非常高效的反向代理、负载平衡&#xff0c;他可以处理2-3万并发连接数&#xff0c;官方监测能支持5万并发。 2.Nginx 有哪些优点&…...

华为OD机试真题 用 C++ 实现 - 括号检查

最近更新的博客 华为OD机试 - 入栈出栈(C++) | 附带编码思路 【2023】 华为OD机试 - 箱子之形摆放(C++) | 附带编码思路 【2023】 华为OD机试 - 简易内存池 2(C++) | 附带编码思路 【2023】 华为OD机试 - 第 N 个排列(C++) | 附带编码思路 【2023】 华为OD机试 - 考古…...

Windows下SecureCRT的下载、安装、使用、配置【Telnet/ssh/Serial】

目录 一、概述 二、SecureCRT的下载、安装 三、SecureCRT的使用  &#x1f449;3.1 使用SSH协议连接Linux开发主机  &#x1f449;3.2 使用Serial(串口)协议连接嵌入式开发板  &#x1f449;3.3 使用Telnet协议连接嵌入式开发板 四、SecureCRT配置会话选项  &#x1f3a8;4…...

Git 分支操作

1&#xff1a;什么是分支几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离 开来进行重大的Bug修改、开发新的功能&#xff0c;以免影响开发主线。 几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作…...

【面试题】TCP如何保证传输可靠性?TCP流量控制实现、拥塞控制、ARQ协议、停止等待ARQ、连续ARQ

文章目录1. TCP 如何保证传输的可靠性&#xff1f;2.TCP 如何实现流量控制&#xff1f;3.TCP 的拥塞控制是怎么实现的&#xff1f;3.ARQ 协议了解吗?4.停止等待 ARQ 协议5.连续 ARQ 协议1. TCP 如何保证传输的可靠性&#xff1f; 基于数据块传输 &#xff1a;应用数据被分割成…...

MySQL一隐式转换

我相信90%以上的同学们在平时开发时&#xff0c;或多或少都被隐式转换&#xff08;CONVERT_IMPLICIT&#xff09;坑过&#xff0c;甚至测出bug前你都浑然不知。你还别不信&#xff0c;“无形之刃&#xff0c;最为致命&#xff01;” mysql> SELECT * from t_user; ---------…...

风光并网对电网电能质量影响的matlab/simulink仿真建模

之前配电网的一个项目&#xff0c;我把其中一部分分享给大家&#xff0c;电能质量影响这部分&#xff0c;我在模型中主要体现的就是不同容量的光伏、风电接入&#xff0c;对并网点的电压影响情况。&#xff08;主页还有单独风电并网系统&#xff0c;光伏并网发电系统以及微电网…...

浅谈Spring循环依赖

文章目录1.前言2.什么是循环依赖&#xff1f;3.两种Spring容器循环依赖3.1.构造器循环依赖&#xff08;无法解决&#xff09;3.2.setter循环依赖&#xff08;可以解决&#xff09;3.3.小结4.循环依赖检查5.循环依赖的处理5.1.单例setter循环依赖5.2.Spring解决循环依赖5.3. 循环…...

华为OD机试题 - 拼接 URL(JavaScript)| 包含代码编写思路

最近更新的博客 华为OD机试题 - 字符串加密(JavaScript) 华为OD机试题 - 字母消消乐(JavaScript) 华为OD机试题 - 字母计数(JavaScript) 华为OD机试题 - 整数分解(JavaScript) 华为OD机试题 - 单词反转(JavaScript) 华为OD机试题 最近更新的博客使用说明拼接 URL题目…...

【FFMPEG】Filtering Introduction[翻译/举例]

Filtering Introduction Filtering in FFmpeg is enabled through the libavfilter library. FFmpeg中的Filtering可以通过libavfilter library来使用。 In libavfilter, a filter can have multiple inputs and multiple outputs. To illustrate the sorts of things that are…...

什么是IP65?仅仅是防水等级吗?看完本文直呼666!

IP65在硬件设备&#xff0c;准确的来说在电气设备中&#xff0c;这个参数很常见&#xff0c;但是作为网络技术的博主&#xff0c;为啥要介绍IP65&#xff1f; 这个很好解释&#xff0c;因为网络设备&#xff0c;比如路由器、交换机&#xff0c;还有服务器、监控等都是属于电气…...

Flask入门(10):数据库连接池

目录10.数据库连接池模式一模式二示例&#xff1a;使用数据库连接池进行登录验证10.数据库连接池 参考&#xff1a;https://www.cnblogs.com/wangkun122/articles/8992637.html 通过DBUtils实现数据库连接池 安装&#xff1a; pip install DBUtils1.2注意&#xff1a;pytho…...

华为OD机试C++实现 - 最小步骤数

最近更新的博客 华为OD机试 - 入栈出栈(C++) | 附带编码思路 【2023】 华为OD机试 - 箱子之形摆放(C++) | 附带编码思路 【2023】 华为OD机试 - 简易内存池 2(C++) | 附带编码思路 【2023】 华为OD机试 - 第 N 个排列(C++) | 附带编码思路 【2023】 华为OD机试 - 考古…...

数仓:用户行为类指标一网打尽

前言 用户行为分析是对用户在产品或触点上产生的行为及行为背后的数据进行分析&#xff0c;通过构建用户行为数据分析体系或者用户画像&#xff0c;来改变产品、营销、运营决策&#xff0c;实现精细化运营&#xff0c;指导业务增长。总之&#xff0c;很重要。 先来看下用户类…...

mysql数据库的主从复制

一、实现主从复制的方式。 异步复制&#xff1a;它是mysql默认的同步方式&#xff0c;从库通过io线程去拉取 bin log时&#xff0c;主库不需要关注这个时候是否有从库在同步数据&#xff0c;他只做自己的事情就可以了&#xff0c; 整个复制过程都是异步完成的 ; 半同步复制&…...

【极海APM32替代笔记】低功耗模式、WFI命令等进入不了休眠的可能原因(系统定时器SysTick一直产生中断)

【极海APM32替代笔记】低功耗模式、WFI命令等进入不了休眠的可能原因&#xff08;系统定时器SysTick一直产生中断&#xff09; 【STM32笔记】低功耗模式配置及避坑汇总 前文&#xff1a; blog.csdn.net/weixin_53403301/article/details/128216064 【STM32笔记】HAL库低功耗模…...

一文搞懂秒杀系统,欢迎参与开源,提交PR,提高竞争力。早日上岸,升职加薪。

前言 秒杀和高并发是面试的高频考点&#xff0c;也是我们做电商项目必知必会的场景。欢迎大家参与我们的开源项目&#xff0c;提交PR&#xff0c;提高竞争力。早日上岸&#xff0c;升职加薪。 知识点详解 秒杀系统架构图 秒杀流程图 秒杀系统设计 这篇文章一万多字&#xff0c;…...

RMBG-2.0部署避坑指南:常见问题解决方案

RMBG-2.0部署避坑指南&#xff1a;常见问题解决方案 1. 引言 最近RMBG-2.0这个开源背景去除模型确实火得不行&#xff0c;效果确实惊艳&#xff0c;精确到发丝级别的抠图能力让很多开发者跃跃欲试。但在实际部署过程中&#xff0c;不少朋友都遇到了各种坑&#xff1a;环境配置…...

CSDN Markdown编辑教程

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…...

NaViL-9B开箱即用:无需下载权重,一键体验图片理解和文本对话

NaViL-9B开箱即用&#xff1a;无需下载权重&#xff0c;一键体验图片理解和文本对话 1. NaViL-9B镜像概述 NaViL-9B是上海人工智能实验室研发的原生多模态大语言模型&#xff0c;支持纯文本问答和图片理解双重能力。这个预置镜像的最大特点是开箱即用——所有模型权重文件已内…...

Wireshark过滤规则、OSI模型与TCP三次握手详解

本文内容有以下三个部分&#xff1a; wireshark过滤规则osi模型简述tcp三次握手 一、wireshark过滤规则 wireshark只是一个抓包工具&#xff0c;用其他抓包工具同样能够分析tcp三次握手协议。例如&#xff0c;Sniffmaster是一款全平台抓包工具&#xff0c;支持HTTPS、TCP和UDP协…...

Z-Image-Turbo_Sugar脸部Lora入门必看:从Xinference启动到Gradio出图完整流程

Z-Image-Turbo_Sugar脸部Lora入门必看&#xff1a;从Xinference启动到Gradio出图完整流程 想快速生成甜美风格的人物脸部图片&#xff1f;Z-Image-Turbo_Sugar脸部Lora模型专门为此而生&#xff0c;让你轻松创作出纯欲甜妹风格的头像作品。 1. 环境准备与快速启动 1.1 了解你的…...

平行泊车和垂直泊车的程序代码(基于MATLAB开发,含代码与说明文档)

平行泊车和垂直泊车的程序代码&#xff0c;基于MATLAB开发&#xff0c;包含代码和说明文档平行与垂直泊车路径规划系统&#xff1a;基于 MATLAB 的自动驾驶辅助功能实现一、背景与目标----------------在 L2/L3 级自动驾驶量产方案中&#xff0c;低速泊车是用户感知最强、使用频…...

Laravel 11重磅更新:10大核心特性解析

Laravel 11.x&#xff08;2024年3月发布&#xff09;引入了多项重要更新&#xff0c;主要特性如下&#xff1a; 1. 精简项目结构 默认移除了 app/Http/Kernel.php 和 app/Console/Kernel.php&#xff0c;中间件配置迁移至 bootstrap/app.php&#xff1a; ->withMiddleware(…...

PHP源码部署需要多大硬盘空间_PHP项目存储空间估算方法【方法】

...

SEO研究是否需要进行A-B测试

SEO研究是否需要进行A/B测试 在当今竞争激烈的数字市场中&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;已经成为企业提升网站流量和品牌知名度的重要手段。随着SEO领域的不断发展&#xff0c;许多企业开始质疑&#xff1a;是否需要在SEO研究中进行A/B测试。本文将深入…...

9.7%年复合增长率!内容安全审查平台未来六年发展路径清晰,市场潜力凸显

在数字内容呈指数级增长、全球网络监管政策趋严的背景下&#xff0c;内容安全审查平台作为保障数字空间合规性的核心工具&#xff0c;正经历从“规则驱动”向“AI智能驱动”的范式转型。据恒州诚思调研统计&#xff0c;2025年全球市场规模达179.3亿元&#xff0c;预计至2032年将…...