此打字稿实现展示了一个重构过程,以提高灵活性和可维护性。 让我们重新提示它以清晰并改善流程。
表
初始问题
原始方法的限制原始代码使用了这些打字条类型:
此>在评分函数中使用:
><code class="language-typescript">// Reaction.ts export type Reaction = { count: number; percentage: number; }; // FinalResponse.ts import { Reaction } from './Reaction'; export type FinalResponse = { totalScore: number; headingsPenalty: number; sentencesPenalty: number; charactersPenalty: number; wordsPenalty: number; headings: string[]; sentences: string[]; words: string[]; links: { href: string; text: string }[]; exceeded: { exceededSentences: string[]; repeatedWords: { word: string; count: number }[]; }; reactions: { likes: Reaction; unicorns: Reaction; explodingHeads: Reaction; raisedHands: Reaction; fire: Reaction; }; };</code>
FinalResponse
2。原始方法的局限
<code class="language-typescript">// calculator.ts export const calculateScore = ( // ... input parameters ... reactions: { likes: Reaction; unicorns: Reaction; explodingHeads: Reaction; raisedHands: Reaction; fire: Reaction; }, ): FinalResponse => { // Score calculation logic... };</code>
> 3。实施地图模式解决方案
为了解决这个问题,实现了一种使用FinalResponse.ts
类似结构的更具动态的方法:calculator.ts
4。清洁代码实现
Map
函数现在使用
<code class="language-typescript">// FinalResponse.ts import { Reaction } from './Reaction'; type AllowedReactions = | 'likes' | 'unicorns' | 'explodingHeads' | 'raisedHands' | 'fire'; export type ReactionMap = { [key in AllowedReactions]: Reaction; }; export type FinalResponse = { // ... other properties ... reactions: ReactionMap; };</code>
5。使用允许的反应
执行类型的安全性
calculateScore
> ReactionMap
具有灵活性,但对于维持类型安全至关重要。联合类型限制了允许的反应键,以防止添加任意反应。
6。视觉比较
<code class="language-typescript">// calculator.ts export const calculateScore = ( // ... input parameters ... reactions: ReactionMap, ): FinalResponse => { // Score calculation logic... };</code>
ReactionMap
7。结论AllowedReactions
这种重构方法平衡了灵活性和类型的安全性。与原始紧密耦合的设计相比,添加新反应仅需要更新类型,可显着提高可维护性并降低错误的风险。 使用A类型有效地模拟了地图的好处,而没有A
对象的运行时开销。以上是don&#t使用像这样的打字稿类型。改用地图模式的详细内容。更多信息请关注PHP中文网其他相关文章!