TS接口类型
创始人
2025-05-31 03:54:19

40. TS接口

1. 定义

TypeScript 中的接口是一种抽象结构,用于定义对象的类型。接口定义了对象应该包含的属性和方法,但不提供实现。

TypeScript 的接口类似于其他编程语言中的接口或抽象类,但不同于它们,接口可以描述对象的形状,包括对象具有哪些属性和方法、属性和方法的类型和返回值类型等。

2. 实现

1. 属性接口

属性接口是一种描述对象属性的接口,用来规范对象的属性名、属性类型和属性值等信息。以下是一个属性接口的示例:

interface Person {name: string;age: number;
}function greet(person: Person) {console.log(`Hello, my name is ${person.name} and I'm ${person.age} years old.`);
}let john: Person = {name: "John",age: 18
};greet(john); // 输出:Hello, my name is John and I'm 18 years old.

在这个示例中,我们定义了一个 Person 接口,它包含了一个 name 属性和一个 age 属性。然后,我们创建了一个 john 对象,它符合 Person 接口的定义,并将它传递给 greet 函数进行问候。由于 john 对象的属性和类型与 Person 接口的定义一致,所以可以顺利通过编译并输出问候语。

2. 可选属性

有时候我们需要定义一个对象的属性是可选的,即这个属性可以存在也可以不存在。在 TypeScript 中,我们可以使用 ? 符号来表示一个属性是可选的。以下是一个可选属性的示例:

interface Person {name: string;age?: number;
}function greet(person: Person) {console.log(`Hello, my name is ${person.name}${person.age ? " and I'm " + person.age + " years old." : "."}`);
}let john: Person = {name: "John"
};let jane: Person = {name: "Jane",age: 20
};greet(john); // 输出:Hello, my name is John.
greet(jane); // 输出:Hello, my name is Jane and I'm 20 years old.

在这个示例中,我们将 age 属性定义为可选的,即可以存在也可以不存在。然后,在 greet 函数中,我们使用了一个三目运算符来判断 age 属性是否存在,并根据不同的情况输出不同的问候语。

3. 只读属性

只读属性,即属性只能在对象创建时被赋值,以后不能被修改。使用 readonly 关键字来定义只读属性。以下是一个定义只读属性的接口示例:

interface Point {readonly x: number;readonly y: number;
}let p: Point = { x: 10, y: 20 };
console.log(p.x); // 输出 10p.x = 5; // 报错,因为 x 是只读属性

在这个示例中,我们定义了一个 Point 接口,它具有两个只读属性 xy。然后,我们创建了一个符合 Point 接口的对象 p,并赋值了两个属性。最后,我们尝试修改 p.x 的值,但 TypeScript 报错,因为 x 是只读属性,不能被修改。

注意:只读属性不允许被赋值后再修改,但是如果一个只读属性是一个对象,那么该对象中的属性是可以被修改的,因为只读属性只是保证属性引用不变,而不是属性值不变。

4. 函数接口

函数接口是一种描述函数类型的接口,用来规范函数的参数类型和返回值类型等信息。以下是一个函数接口的示例:

interface Greeter {(name: string): string;
}let greet: Greeter = function(name: string) {return `Hello, ${name}!`;
};console.log(greet("John")); // 输出:Hello, John!

在这个示例中,我们定义了一个 Greeter 接口,它表示一个参数为 name,返回值为字符串的函数类型。然后,我们创建了一个名为 greet 的函数,并将它赋值给 Greeter 接口,这样 greet 就符合 Greeter 接口的定义了。最后,我们调用 greet 函数并输出它的返回值。

5. 可索引接口

可索引接口是一种描述数组和对象的接口,用来规范它们的索引类型和索引值类型等信息。以下是一个可索引接口的示例:

interface StringArray {[index: number]: string;
}let colors: StringArray = ["Red", "Green", "Blue"];console.log(colors[0]); // 输出:Red

在这个示例中,我们定义了一个 StringArray 接口,它表示一个索引为 number 类型,值为 string 类型的数组。然后,我们创建了一个 colors 数组,并将它赋值给 StringArray 接口,这样 colors 就符合 StringArray 接口的定义了。最后,我们输出 colors 数组的第一个元素。

6. 类接口

类接口是一种描述类类型的接口,用来规范类的成员和属性等信息。以下是一个类接口的示例:

interface Person {name: string;age: number;greet(name: string): void;
}class Student implements Person {constructor(public name: string, public age: number) {}greet(name: string) {console.log(`Hello, ${name}, I'm ${this.name}.`);}
}let john: Person = new Student("John", 18);john.greet("Jane"); // 输出:Hello, Jane, I'm John.

在这个示例中,我们定义了一个 Person 接口,它表示一个具有 name 属性、age 属性和 greet 方法的类类型。然后,我们创建了一个 Student 类,并将它实现 Person 接口,这样 Student 就符合 Person 接口的定义了。最后,我们创建了一个 john 对象,并调用它的 greet 方法输出问候语。由于 john 对象是 Student 类的实例,而 Student 类实现了 Person 接口,所以 john 对象也符合 Person 接口的定义。

7. 继承接口

继承接口是一种描述接口继承关系的接口,用来规范接口之间的关系。以下是一个继承接口的示例:

interface Shape {color: string;
}interface Circle extends Shape {radius: number;
}let circle: Circle = {color: "Red",radius: 10
};console.log(circle.color); // 输出:Red
console.log(circle.radius); // 输出:10

在这个示例中,我们定义了一个 Shape 接口,它表示一个具有 color 属性的形状。然后,我们定义了一个 Circle 接口,并使用 extends 关键字将它继承自 Shape 接口,这样 Circle 就具有了 color 属性和 radius 属性。最后,我们创建了一个 circle 对象,并输出它的 color 属性和 radius 属性。

8. 混合接口

混合接口是一种同时描述函数、类和对象等多种类型的接口,用来规范它们的成员和属性等信息。以下是一个混合接口的示例:

interface Counter {(start: number): string;interval: number;reset(): void;
}function createCounter(): Counter {let counter = function(start: number) {} as Counter;counter.interval = 10;counter.reset = function() {};return counter;
}let c = createCounter();
c(10);
c.reset();
c.interval = 5.0;

在这个示例中,我们定义了一个 Counter 接口,它表示一个具有函数类型、interval 属性和 reset 方法的接口。然后,我们创建了一个 createCounter 函数,它返回一个符合 Counter 接口的对象。这个对象既是一个函数,也具有 interval 属性和 reset 方法。最后,我们调用这个对象的函数、方法和属性,并输出它们的返回值。

相关内容

热门资讯

凌恩生物明星产品:让你读懂细胞... 叶绿体和线粒体是真核细胞中不可或缺的重要细胞器,是第二套遗传信息系统,与...
密码如何“加盐加密”处理?程序... 目录 前言 一、手写加盐算法 1.1、加密 1.1.1、加密思路 1.1.2、加密简图 1.1.3、...
黑化什么意思网络用语 极速百科... 黑化,词语,也可指性情大变,比如原本某A是个文青,温文尔雅,突然某天某A大开杀戒,残忍无比,这就是所...
带有古和今的成语,古今的对话:... 带有古和今的成语有很多,例如:古为今用、古往今来、古稀之年、古今中外等等。这些成语都包含了古代和现代...
能力强的人有什么特点,标题建议... 能力强的人往往具备以下特点: 1. 学习能力:能力强的人通常能够快速学习新知识和技能,并能够灵...
跑步机怎么操作大图 极速百科网... 1. 启动跑步机:首先,确保跑步机已经插上电源,然后打开跑步机的电源开关。大多数跑步机都有一个启动/...
ELK+Filebeat+Ka... 文章目录ELK+Filebeat+Kafka分布式日志管理平台搭建为什么选择ELK&...
哈希结构的代码实现(开散列、闭... 哈希结构 unordered系列的关联式容器之所以查找效率比较高,是因为其底层使用了哈...
Java Annotation... 注解 注解(Annotation),又称元数据ÿ...
bim装配式工程师证书有用吗,... 首先,我们需要明确一点,那就是BIM装配式工程师证书肯定是有用的。这个证书证明了持有人掌握了BIM技...
什么东西可以深层清洁毛孔 极速... 首先,我们要明白,毛孔的深层清洁不仅仅是指清洁面部皮肤,还包括清洁身体和头发的毛孔。接下来,我将为你...
vip全称 极速百科网 极速百... VIP的英文全称为Very Important Person,中文翻译为重要人物、要员。一般指VIP...
公共交通工具有哪些 极速百科网... 1. 城市公交:这是大家最熟悉的公共交通工具之一,提供在城市内部的运输服务。公交车根据不同的大小和座...
智能火焰与烟雾检测系统(Pyt... 摘要:智能火焰与烟雾检测系统用于智能日常火灾检测报警,利用摄像头画面实时...
【学习笔记】《Writing ... 文章目录14 Energizing Writing 充满活力的写作14.1. ACTIVE VERS...
基于R语言因果关系推断模型实践... 通过数据得到可靠的因果关系一直是科学研究的主要目标之一。对因果关系的研究已经有千年之久;...
手机qq里怎么分组,手机QQ分... 1. 打开QQ应用,进入联系人界面。 2. 找到你想要分组的联系人或群聊。 3. 长按想...
带指的成语有哪些 极速百科网 ... 指日高升、一指蔽目、屈指可数、十指连心、三指佞臣、染指垂涎、戟指怒目、屈指可数。 如需更多含有...
第十八天 Vue-前端工程化总... 目录 Vue-前端工程化 1. 前后端分离开发 1.1 介绍 1.2 Yapi 2. 前端工程化 2...
急用钱公积金怎么提现,公积金提... 1. 了解公积金提现的条件和手续。在您考虑提现之前,请务必了解您所在地区的具体规定和要求。通常,您需...
杯子刻字励志八个字,志存高远,... 杯子刻字励志八个字建议如下: 1. 志存高远,自强不息。 2. 持之以恒,锐意进取。 ...
YOLOV4详解 1. 为什么要学习YOLOV4? 通过学习YOLOV3这个很重要的算法, 可以学习到作者重新设计Da...
提高曝光率:外贸网站如何充分利... 自从我从事外贸行业以来,谷歌优化一直是我关注的重点。 作为一个外贸从业者,...
Vue3 学习总结补充(一) 文章目录1、Vue3中为什么修改变量的值后,视图不更新?2、使用 ref...
锤哥和锤弟是双胞胎吗,锤哥和锤... 锤哥和锤弟是双胞胎吗?锤哥和锤弟这两个名字可能只是表示两个有亲属关系的人,而并不一定表示他们是双胞胎...
ido什么意思,IDO:意义、... IDO全称“I Do”,源自婚礼誓言,意为“我愿意”。表达对爱情的坚守。IDO钻戒的寓意是珍视爱情的...
形容夜色美的唯美句子,夜色的魅... 1. 夜幕降临,华灯初上,整个城市被柔和的灯光笼罩,宛如一颗璀璨的明珠。 2. 夜色中的星空,...
已婚女人梦见龙预示有什么征兆,... 已婚女人梦见龙,一般来说,是一种非常吉祥的预兆。在中国传统文化中,龙象征着富贵、吉祥和好运。 ...
2022国赛2:神州路由器pp...       PPP Multilink协议(MP)是PPP(...
市场利率是什么,市场利率:基本... 市场利率是指由资金市场上供求关系决定的利率。市场利率是市场资金借贷成本的真实反映,而能够及时反映短期...