在 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,接口,函数签名 来源: