首页 > web前端 > js教程 > don&#t使用像这样的打字稿类型。改用地图模式

don&#t使用像这样的打字稿类型。改用地图模式

DDD
发布: 2025-01-29 16:31:08
原创
732 人浏览过

此打字稿实现展示了一个重构过程,以提高灵活性和可维护性。 让我们重新提示它以清晰并改善流程。

增强打字稿的灵活性与地图模式:案例研究

在最近的一个项目中,我遇到了一个打字稿实现,尽管功能虽然缺乏灵活性。本文详细介绍了问题,使用地图模式的解决方案以及该方法如何增强代码可维护性。 目录的

初始问题

原始方法的限制
  1. 实施地图模式解决方案
  2. 清洁代码实现
  3. 使用允许的反应执行类型安全
  4. 视觉比较
  5. 结论
  6. 1。初始问题

原始代码使用了这些打字条类型:

>在评分函数中使用:

>
<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>
登录后复制

ReactionMap7。结论AllowedReactions

这种重构方法平衡了灵活性和类型的安全性。与原始紧密耦合的设计相比,添加新反应仅需要更新类型,可显着提高可维护性并降低错误的风险。 使用A类型有效地模拟了地图的好处,而没有A

对象的运行时开销。>

以上是don&#t使用像这样的打字稿类型。改用地图模式的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板