ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

在 TypeScript 中何时使用类型与接口?

2023-07-05 17:29:45  阅读:205  来源: 互联网

标签:TypeScript 接口 函数签名


让我们深入研究 TypeScript 中的一个常见问题:何时使用“类型”与“接口”。了解这些构造的正确使用对于编写可维护且健壮的代码至关重要。让我们使用板球世界中引人入胜的示例来探讨五种不同的情况,并讨论哪种方法更适合每种情况。

情况 1:定义对象结构

定义对象的结构时,可以使用“类型”和“接口”。但是,如果将来需要扩展或实现该结构,建议选择“interface”。让我们考虑一个场景,我们定义板球运动员信息的结构:

接口 CricketPlayer {
名称:字符串;
年龄:数字;
团队:字符串;
} 
const 球员:CricketPlayer = {
姓名:“Virat Kohli”,“Virat Kohli”
年龄:33
团队:“印度”
};

在这种情况下,“接口”是合适的,因为它允许轻松扩展和实现。

情况 2:组合类型或接口

当组合多个类型或接口时,“type”是更灵活的选项。假设我们要定义板球比赛的类型,包含球员详细信息和比赛统计数据:

类型 CricketMatchPerformance  =  CricketPlayer  & {
 场地: 字符串;
 得分: 数量;
 采取的三柱门: 数量;
} ; 
const match:  CricketMatchPerformance  = { 
 name:  "Virat Kohli" ,
 年龄:  33 , 
 team:  "India" ,
 场地:  "MCG" , 
 runScored:  92 , 
 wicketsTaken:  1 , 
} ;

通过使用“type”,我们可以轻松地将多种类型合并为一种类型,从而使我们能够组合复杂的结构。

情况 3:扩展/实施

当您需要扩展或实现现有类型或接口时,“接口”是首选。考虑这样一种情况,我们有一个基本的板球运动员界面,并且想要为击球手创建一个继承球员界面的界面:

接口 Batsman 扩展 CricketPlayer {
 击球平均数数字
} 
const 击球手:击球手= { 
 name : "Rohit Sharma" ,
 年龄: 34 , 
 team : "India" , 
 battingAverage : 49.27 , 
};

使用“接口”使我们能够无缝扩展现有结构。

情况 4:函数签名

描述函数签名时,可以使用“类型”和“接口”。但是,如果您需要严格实现函数签名,建议使用“interface”。让我们创建一个函数来计算击球率:

接口 BattingAverageCalculator { 
(跑数:数字,数:数字):数字; 
} 
constcalculateBattingAverage  : BattingAverageCalculator = ( runScored: number , inings: number ) => runningScored / innings; const avg =计算击球平均数( 4210 , 96 ); 控制台log ( `击球率:${avg} ` );




在这种情况下,“接口”提供了函数签名的清晰定义,有助于严格实现和更好的可读性。

情况 5:并集和交集类型

在处理并集或交集类型时,建议选择“type”。让我们考虑一个场景:

定义球的类型,可以是板球或网球:

类型 =板球| 网球
接口 CricketBall {
 重量:数量; 
 颜色字符串
}
接口 TennisBall {
 大小字符串
 颜色字符串
} 
const  cricketBall : CricketBall = {
 重量: 156 ,
 颜色: "红色" , 
}; 
常量 网球TennisBall = {
 尺寸“小”
 颜色“黄色”
};

使用“type”允许我们创建联合类型,将不同的类型组合成一个类型。

通过考虑这五种情况,我们探索了 TypeScript 中“类型”和“接口”的适当用例。请记住,“接口”更适合定义对象结构、扩展/实现或描述函数签名。另一方面,“type”在组合类型、并集/交集类型以及创建别名方面提供了灵活性。

标签:TypeScript,接口,函数签名
来源:

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有