TypeScript接口

简介: TypeScript接口

1 什么是接口

接口是一系列抽象方法的声明,是一些方法特征的集合,这些方法都应该是抽 象的,需要由具体的类去实现,然后第三方就可以通过这组抽象方法调用,让具体的类执行具体的方法

接口也是一种数据类型

格式:

interface interface_nane {}

2 接口的基本使用

:void(不返回值)

interface IFullName{
    firstName:string,
    lastName:string
}
let goddassName:IFullName={
    firstName:"杨",
    lastName:"超越"
}
console.log(goddassName.firstName);
console.log(goddassName.lastName);
function say({firstName,lastName}:IFullName):void{
    console.log(`精灵古怪:${firstName}${lastName}`);
}
say(goddassName)

3 可选属性与只读属性

可选属性使用: ?

只读属性使用: readonly

readonlyconst的区别:做为变量使用的话用const,若做为属性则使用readonly

// 可选属性  使用?来进行修饰
interface IFullName{
    firstName:string,
    lastName:string,
    age?:number
}
let goddassName:IFullName={
    firstName:"杨",
    lastName:"超越"
}
console.log(goddassName.firstName);
console.log(goddassName.lastName);
// 只读属性   readonly
interface IInfo{
    readonly uanme:string;
    readonly uage:number;
}
let beauty:IInfo={
    uanme:"汉库克",
    uage:18
}

总结:readyonlyconst 区别:

最简单判断该用readonly还是const的方法是看要把它做为变量使用还是做为一个属性。做为变量使用的话用const。若做为属性则使用readonly

4 索引签名

    定义:索引签名用于描述那些“通过索引得到”的类型
    格式:如 [props: string] :any
    应用场景:解决参数问题
interface IFullName{
    firstName:string
    lastName:string
    age?:number
    singName?:string
    [props:string]:any
}

注意点:如果使用接口来限定了变量或者形参,那么在给变量或者形参赋值的时候,多一个或者少一个都不行实际开发中往往会出现多或者少的情况,怎么解决?

// 少一个或者多多个属性
// 解决方案:可选属性
let goddass1:IFullName ={firstName:"欧阳",lastName:"娜娜"};
let goddass2:IFullName ={firstName:"欧阳",lastName:"娜娜",age:22};
// 多一个或者多多个属性
// 方案一:使用变量
let info = {firstName:"欧阳",lastName:"娜娜",age:22,singName:"美女",dance:"跳舞"}
let doddass3:IFullName = info
// 方案二:适用类型断言
let goddass4:IFullName = ({firstName:"古力",lastName:"娜扎",age:18,singName:"美女",dance:"跳舞"})as IFullName
// 索引签名?
// 索引签名用于描述那些“通过索引得到”的类型
// 注意点:对象中的键,会被转化为字符串
interface Ibeauty{
    [props:string]:string;
}
let name:Ibeauty = {name:"迪丽热巴",name2:"古力娜扎",name3:"欧阳娜娜"};
interface Iage{
    [props:string]:number
}
let afe:Iage = {age1:18,age2:20,age3:20};
// 方案三:索引签名
let goddass5:IFullName = {firstName:"杨紫",lastName:"杨幂",age:20,singName:"女明星",dance:"演员"}

5 函数接口

为了使用接口表示函数类型,我们需要给接口定义一个调用签名。

它就像是一个只有参数列表和返回值类型的函数定义

interface ImakeMoney{
    (salary:number,reward:number):number
}
let sum:ImakeMoney=function(x:number,y:number):number{
    return x+y;
}
let res = sum(10,20)
console.log(res);

6 接口的继承

接口继承就是说接口可以通过其他接口来扩展自己。

Typescript允许接口继承多个接口。

继承使用关键字extends

// 单继承
interface IPerson{
    age:number
}
interface IName extends IPerson{
    name:string
}
let lady:IName={
    name:"杨超越",
    age:20
}
// 多继承
interface IFatherMoney{
    m1:number
}
interface IMotherMoney{
    m2:number
}
interface ISon extends IFatherMoney,IMotherMoney{
    s:number
}
let money:ISon={
    m1:100,
    m2:100,
    s:100
}
console.log(`子代一共有${money.m1+money.m2+money.s}万元`);

7 接口与类型别名的异同

  • 相同点:
都可以描述属性或方法
  都允许拓展

不同点:

type可以声明基本数据类型,联合类型,数组等;
  interface只能声明变量
  当出现使用type和interface声明同名的数据时;
  type会直接报错;
  interface会进行组合
  type不会自动合并;interface会
// 相同点:
type wonenStar ={
    name:string
    age:number
    perform():any
}
interface IWSar{
    name:string
    age:number
    perform():any
}
let star1={
    name:"杨紫",
    age:20,
    perform(){
        return "家有儿女"
    }
}
let star2 = {
    name:"李一桐",
    age:18,
    perform(){
        return "射雕英雄传"
    }
}
// 2.都允许扩展
type money1={
    x1:number
}
type money2=money1&{
    x2:number
}
let money:money2={
    x1:10,
    x2:20
}
interface IStar1{
    name:string
}
interface IStar2 extends IStar1{
    age:number
}
let star:IStar2={
    name:"范冰冰",
    age:26
}
// 不同点:
// 1.type可以声明基本数据类型,联合类型,数组等
// interface只能声明变量
type age = number;
type info = string | number | boolean;
type beautyList = [string | number];
// interface Iage = number; //报错
// 2.当出现使用type和interface声明同名的数据时
// type会直接报错
// interface会进行组合
// type mygoddassName = {
//     name:string
// }
// type mygoddassName = {
//     name:number
// }
interface mygoddassName{
    name:string
}
interface mygoddassName{
    name:string
    age:number
}
let goddass:mygoddassName = {
    name:"赵丽颖",
    age:20


相关文章
|
5月前
|
JavaScript
​​​​Typescript 接口 和继承 数组处理
ts的基础数据类型,可用来处理一般数据,但是碰到后台传入的复杂对象数组的时候,我们可以使用ts中的接口来定义处理
58 0
|
5月前
|
JavaScript 前端开发 C++
Typescript.中文.接口声明.lib.es5.d.ts
Typescript.中文.接口声明.lib.es5.d.ts
37 0
|
10天前
|
JavaScript
typeScript基础(5)_对象的类型-interfaces接口
本文介绍了TypeScript中接口(interfaces)的基本概念和用法,包括如何定义接口、接口的简单使用、自定义属性、以及如何使用`readonly`关键字定义只读属性。接口在TypeScript中是定义对象形状的重要方式,可以规定对象的必有属性、可选属性、自定义属性和只读属性。
26 1
|
12天前
|
数据采集 JavaScript 前端开发
使用 TypeScript 接口优化数据结构
使用 TypeScript 接口优化数据结构
|
2月前
|
开发框架 前端开发 JavaScript
在基于vue-next-admin的Vue3+TypeScript前端项目中,为了使用方便全局挂载对象接口
在基于vue-next-admin的Vue3+TypeScript前端项目中,为了使用方便全局挂载对象接口
|
3月前
|
JavaScript 开发者 索引
TypeScript接口与类型别名:深入解析与应用实践
【7月更文挑战第10天】TypeScript的接口和类型别名是定义类型的关键工具。接口描述对象结构,用于类、对象和函数参数的形状约束,支持可选、只读属性及继承。类型别名则为复杂类型提供新名称,便于重用和简化。接口适合面向对象场景,类型别名在类型重用和复杂类型简化时更有优势。选择时要考虑场景和灵活性。
|
2月前
|
JavaScript 前端开发 API
Vue 3+TypeScript项目实战:解锁vue-next-admin中的全局挂载对象接口,让跨组件共享变得高效而优雅!
【8月更文挑战第3天】在构建Vue 3与TypeScript及vue-next-admin框架的应用时,为提高多组件间共享数据或方法的效率和可维护性,全局挂载对象接口成为关键。本文通过问答形式介绍其必要性和实现方法:首先定义全局接口及其实现,如日期格式化工具;接着在`main.ts`中通过`app.config.globalProperties`将其挂载;最后在组件内通过Composition API的`getCurrentInstance`访问。这种方式简化了跨组件通信,增强了代码复用性和维护性。
32 0
|
3月前
|
JavaScript 前端开发 程序员
Typescript 【实用教程】(2024最新版)含类型声明,类型断言,函数,接口,泛型等
Typescript 【实用教程】(2024最新版)含类型声明,类型断言,函数,接口,泛型等
65 0
|
3月前
|
JavaScript Java 索引
TypeScript(四)接口
TypeScript(四)接口
32 0
|
3月前
|
JavaScript API
TypeScript 项目中接口的统一管理
TypeScript 项目中接口的统一管理
42 0