Pelaksanaan TypeScript ini mempamerkan proses refactoring untuk meningkatkan fleksibiliti dan penyelenggaraan. Mari kita tegangkannya untuk kejelasan dan aliran yang lebih baik.
Semasa projek baru -baru ini, saya menghadapi pelaksanaan TypeScript yang, walaupun berfungsi, tidak mempunyai fleksibiliti. Pos ini memperincikan masalah, penyelesaiannya menggunakan corak peta, dan bagaimana pendekatan ini meningkatkan pemeliharaan kod.
Jadual Kandungan
1. Masalah awal
<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>
ini digunakan dalam fungsi pemarkahan: FinalResponse
<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>
2. Batasan Pendekatan Asal
Menambah tindak balas baru yang diperlukan pengubahsuaian di pelbagai fail (, dan berpotensi yang lain). Gandingan ketat ini meningkatkan risiko kesilapan dan membuat kod kurang dipelihara. FinalResponse.ts
calculator.ts
Untuk menangani ini, pendekatan yang lebih dinamik menggunakan struktur seperti
dilaksanakan:
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>
fungsi sekarang menggunakan
calculateScore
ReactionMap
<code class="language-typescript">// calculator.ts export const calculateScore = ( // ... input parameters ... reactions: ReactionMap, ): FinalResponse => { // Score calculation logic... };</code>
Walaupun menawarkan fleksibiliti, sangat penting untuk mengekalkan keselamatan jenis. Jenis kesatuan mengehadkan kekunci tindak balas yang dibenarkan, menghalang penambahan tindak balas sewenang -wenangnya.
ReactionMap
6. Perbandingan visual AllowedReactions
7. KESIMPULAN
dengan berkesan memancarkan manfaat peta tanpa overhead runtime objek .
Atas ialah kandungan terperinci Don T menggunakan jenis jenis seperti ini. Gunakan corak peta sebaliknya. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!