TypeScript接口

1.TypeScript接口基本使用

声明接口需要使用 interface 关键字。

interface User {name: string;age: number;
}

使用接口约束对象的类型。

const user: User = {name: "张三",age: 20,
};

使用接口约束函数的类型。

interface Sum {(n: number, m: number): number;
}​
const sum: Sum = function (a, b) {return a + b;
};
使用接口约束类的成员。interface Calendar {name: string;addEvent(): void;removeEvent(): void;
}
​
class GoogleCalendar implements Calendar {name: string = "test";addEvent(): void {}removeEvent(): void {}
}

2 宽松的接口检查

TypeScript 接口检查是宽松的,当变量满足了接口规范以后,即使变量中存在接口规范以外的属性也是可以的。

interface User {name: string;age: number;
}
​
let user: User = {name: "张三",age: 20,
};
​
let someone = {name: "李四",age: 50,sex: "男",
};
​
user = someone;
interface Reportable {summary(): void;
}
​
function printSummary(item: Reportable): void {item.summary()
}
​
const person = {name: "张三",summary() {console.log(`您好, 我的名字叫${this.name}`);},
};
​
printSummary(person);

对于宽松的接口检查政策字面量是个例外,也就是说对于字面量的接口类型检查是严格的,不能出现接口规范以外的其他属性。

interface User {name: string;age: number;
}
​
// ✅
const user: User = { name: "张三", age: 20 };
​
// ❌
// 不能将类型"{ name: string; age: number; sex: string; }"分配给类型"User"
// 对象字面量只可以指定已知属性, "sex"不在类型"User"中
const another: User = { name: "李四", age: 40, sex: "男" };
interface Reportable {summary(): void;
}
​
function printSummary(item: Reportable): void {item.summary();
}
​
// ❌
// 类型"{ name: string; summary(): void; }"的参数不能赋给类型"Reportable"的参数。
// 对象字面量只可以指定已知属性, "name"不在类型"Reportable"中。ts(2345)
printSummary({name: "张三",summary() {console.log(`您好, 我的名字叫${this.name}`);},
});
那么如何绕过字面量严格类型检查模式呢?// 使用类型断言
interface User {name: string;age: number;
}
​
const another: User = { name: "李四", age: 40, sex: "男" } as User;
// 使用索引签名
interface User {name: string;age: number;[key: string]: string | number;
}
​
const another: User = { name: "李四", age: 40, sex: "男" };

3 接口继承

接口具有继承特性即接口与接口之间可以存在继承关系,而且一个接口可以继承多个接口。

// 接口继承示例
interface Sizes {sizes: string[];getAvailableSizes(): string[];
}
​
interface Shape {color: string;
}
​
interface Pizza extends Sizes, Shape {name: string;
}
​
let pizza: Pizza = {name: "张三",color: "skyblue",sizes: ["large", "small"],getAvailableSizes() {return this.sizes;},
};

在继承了接口以后可以对被继承接口中的属性进行重写,但是重写的类型一定要在原有类型的范围以内。

interface User {// name: string | number | boolean;name: any;age: number;
}
​
interface MyUser extends User {name: boolean;
}

4 接口合并

接口具有声明合并特性,即多个相同名称的接口会自动合并。

interface Box {height: number;width: number;
}
​
interface Box {scale: number;
}
​
let box: Box = { height: 5, width: 6, scale: 10 };

5 接口函数重载

interface GetMessage {(id: number): Message | undefined;(type: MessageType): Message[];
}
​
const getMessage: GetMessage = (query: any): any => {if (typeof query === "number") {return data.find((message) => message.id === query);} else {return data.filter((message) => message.type === query);}
};

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

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

相关文章

缺失的第一个正数(LeetCode 41)

文章目录 1.问题描述2.难度等级3.热门指数4.解题思路4.1 暴力4.2 排序4.3 哈希表4.4 空间复杂度为 O(1) 的哈希表4.5 置换 参考文献 1.问题描述 给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级…

WPF Button使用漂亮 控件模板ControlTemplate 按钮使用控制模板实例及源代码 设计一个具有圆角边框、鼠标悬停时颜色变化的按钮模板

续前两篇模板文章 模板介绍1 模板介绍2 WPF中的Button控件默认样式简洁,但可以通过设置模板来实现更丰富的视觉效果和交互体验。按钮模板主要包括背景、边框、内容(通常为文本或图像)等元素。通过自定义模板,我们可以改…

会议室占用时间段 - 华为OD统一考试

OD统一考试 题解: Java / Python / C++ 题目描述 现有若干个会议,所有会议共享一个会议室,用数组表示各个会议的开始时间和结束时间, 格式为: [[会议1开始时间,会议1结束时间],[会议2开始时间,会议2结束时间]] 请计算会议室占用时间段。 输入描述 [[会议1开始时间,…

this和static和const关键字

1. this指针 1.1 基本认识 C中成员函数的特性,在类的非静态成员函数中都会存在一个this指针,来指向当前类,它是隐式的不可见的,是作为函数的第一个参数可以通过this指针来解决二义性的问题 是的,this指针是与类的实例相…

最快速度与最简代码搭建卷积神经网络,并快速训练模型,每日坚持手撕默写代码

大家好,我是微学AI,今天给大家介绍一下最快速度与最简代码搭建卷积神经网络,并快速训练模型,每日坚持手撕默写代码。随着人工智能的快速发展,去年有强大的大模型ChatGPT横空出世,国内的大模型也紧追其后的发…

写一个java状态模式的详细实例

以下是一个示例的 Java 状态模式实现: java Copy code // 定义状态接口 interface State { void handleState(Context context); } // 具体状态类 1 class ConcreteState1 implements State { public void handleState(Context context) { System…

基于ssm西安旅游管理系统论文

摘 要 在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以,对西安旅游信息管理的提升&#x…

JavaScript----字符串拼接

1、字符串拼接 字符串拼接使用: "" 运算符 var iNum1 10; var fNum2 11.1; var sStr abc;result iNum1 fNum2; alert(result); // 弹出21.1result fNum2 sStr; alert(result); // 弹出11.1abc说明 数字和字符串拼接会自动进行类型转换(隐士类型转换)&#…

使用pandas绘图,并保存,支持中文

使用pandas绘图,并保存,支持中文 支持中文标题绘图创建DataFrame绘制图形添加其他绘图细节保存图形显示图形 支持中文标题 import matplotlib.pyplot as plt from matplotlib.font_manager import FontProperties import matplotlib.font_manager as fm…

深入理解Java集合框架

导语: Java集合框架是Java提供的一组用于管理对象的类和接口,它是Java编程中非常重要的一部分。Java集合框架通过提供诸如List、Set、Map等数据结构,为程序员提供了一种方便、高效的管理对象的方式。本文将深入理解Java集合框架,包…

RuntimeError: “slow_conv2d_cpu“ not implemented for ‘Half‘

目录 临时解决方法: RuntimeError: "slow_conv2d_cpu" not implemented for Half train_lora.py中: 原因:cpu不支持fp16类型, 临时解决方法: 注释掉fp16模式, weight_dtype torch.float32i…

Mediapipe绘制实时3d铰接骨架图——Mediapipe实时姿态估计

一、前言 大约两年前,基于自己的理解我曾写了几篇关于Mediapipe的文章,似乎帮助到了一些人。这两年,忙于比赛、实习、毕业、工作和考研。上篇文章已经是一年多前发的了。这段时间收到很多私信和评论,请原谅无法一一回复了。我将尝…

Redis缓存与数据库如何保证一致性

数据库和缓存如何保证一致性? 目录 数据库和缓存如何保证一致性?背景方案先更新数据库,还是先更新缓存?先更新数据库,再更新缓存先更新缓存,再更新数据库 先更新数据库,还是先删除缓存&#xff…

安装 PyQt5 保姆级教程

作者:billy 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 前言 博主之前做应用层开发用的一直是 Qt,这次尝试一下在 python 中使用 Pyqt5 模块来开发 UI 界面,这里做一些…

certum的ip证书购买流程

Certum是成立于欧洲的CA认证机构,经过二十几年的发展Certum已经成为欧洲知名的CA认证机构之一,拥有广泛的客户群体和合作伙伴。IP证书是Certum为只有公网IP地址的网站准备的数字加密服务。今天就随SSL盾小编了解购买Certum旗下的IP证书流程。 第一步&am…

WPF Grid

Resource 在 WPF 中,“Grid” 是一种用于布局的面板控件,而 “Resource” 是一种用于定义可重用对象的机制。您可以将资源定义为 Grid 控件的一部分,以便在整个应用程序中共享和重用。 使用资源可以帮助您简化界面的创建和维护。在 Grid 控件…

总结一些好用的函数

1. <string.h>/<cstring>头文件 中的 memset函数 作用&#xff1a;用于将一段内存区域设置为特定的值(它作用的基本单位是字节) 可以对变量&#xff0c;数组&#xff08;一维数组和二维数组&#xff09;&#xff0c;结构体进行初始化&#xff0c;但是不能对vecto…

数据库进阶教学——读写分离(Mycat1.6+Ubuntu22.04主+Win10从)

目录 1、概述 2、环境准备 3、读写分离实验 3.1、安装jdk 3.2、安装Mycat 3.3、配置Mycat 3.3.1、配置schema.xml ​​​​3.3.2、配置server.xml 3.4、修改主从机远程登陆权限 3.4.1、主机 3.4.2、从机 3.5、启动Mycat 3.6、登录Mycat 3.7、验证 1、概述 读写分…

如何合理配置云服务器的CPU和内存?

​  提到云服务器性能&#xff0c;大抵有两个主要影响因素&#xff0c;CPU 核心数量和内存容量 &#xff0c;它们决定了云服务器的速度和可靠性。日常运用中&#xff0c;我们如何判断网站需要需要更多或更少?如何扩大或缩小它们以优化网站的性能? 一般来说&#xff0c;您拥…

视频遥测终端机的设计需求

目录 1.目的 2.参考文件 3.总体描述 4.硬件资源描述 4.1微控制单元 4.2视频处理单元 4.3性能指标 5.功能要求 5.1系统参数要求 5.1.1系统管理 5.1.2系统配置 5.1.2.1一般参数 5.1.2.2编码参数 5.1.2.3网络参数 5.1.2.4网络服务 5.1.2.5OSD参数 5.1.2.6抓拍 5.…