En aquest tema, explorarem com utilitzar TypeScript en projectes grans. A mesura que els projectes creixen en complexitat i mida, és crucial mantenir el codi organitzat, llegible i fàcil de mantenir. TypeScript ofereix diverses eines i tècniques per ajudar a gestionar projectes grans de manera eficient.
Contingut
Estructura del Projecte
Una bona estructura de projecte és essencial per mantenir el codi organitzat i fàcil de navegar. Aquí tens una estructura recomanada per a projectes grans:
/project-root │ ├── /src │ ├── /components │ ├── /services │ ├── /models │ ├── /utils │ └── index.ts │ ├── /tests │ ├── /unit │ ├── /integration │ └── /e2e │ ├── tsconfig.json ├── package.json └── README.md
Explicació de l'Estructura
- /src: Conté tot el codi font del projecte.
- /components: Components reutilitzables.
- /services: Serveis que encapsulen la lògica de negoci.
- /models: Definicions de tipus i interfícies.
- /utils: Funcions utilitàries.
- index.ts: Punt d'entrada principal del projecte.
- /tests: Conté tots els tests del projecte.
- /unit: Tests unitaris.
- /integration: Tests d'integració.
- /e2e: Tests de punta a punta.
- tsconfig.json: Configuració del compilador TypeScript.
- package.json: Gestió de dependències i scripts del projecte.
- README.md: Documentació del projecte.
Configuració del Compilador
La configuració del compilador és crucial per assegurar-se que el projecte es compila correctament i que es detecten els errors de tipus. Aquí tens un exemple de tsconfig.json
per a un projecte gran:
{ "compilerOptions": { "target": "ES6", "module": "commonjs", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, "outDir": "./dist", "rootDir": "./src", "baseUrl": "./", "paths": { "@components/*": ["src/components/*"], "@services/*": ["src/services/*"], "@models/*": ["src/models/*"], "@utils/*": ["src/utils/*"] } }, "include": ["src/**/*"], "exclude": ["node_modules", "dist"] }
Explicació de les Opcions
- target: Especifica la versió de JavaScript a la qual es compilarà el codi.
- module: Especifica el sistema de mòduls a utilitzar.
- strict: Activa totes les comprovacions estrictes de tipus.
- esModuleInterop: Permet la interoperabilitat amb mòduls ES.
- skipLibCheck: Omple la comprovació de tipus en fitxers de definició de biblioteques.
- forceConsistentCasingInFileNames: Assegura que els noms de fitxers siguin consistents en majúscules i minúscules.
- outDir: Especifica el directori de sortida per als fitxers compilats.
- rootDir: Especifica el directori arrel del codi font.
- baseUrl: Especifica la base per a les rutes relatives.
- paths: Defineix alias per a rutes de mòduls.
Modularització i Reutilització de Codi
La modularització és clau per mantenir el codi organitzat i fàcil de mantenir. Utilitza mòduls per dividir el codi en parts més petites i reutilitzables.
Exemple de Modularització
// src/models/User.ts export interface User { id: number; name: string; email: string; } // src/services/UserService.ts import { User } from '@models/User'; export class UserService { private users: User[] = []; addUser(user: User): void { this.users.push(user); } getUsers(): User[] { return this.users; } } // src/index.ts import { UserService } from '@services/UserService'; const userService = new UserService(); userService.addUser({ id: 1, name: 'John Doe', email: '[email protected]' }); console.log(userService.getUsers());
Gestió de Dependències
Utilitza un gestor de paquets com npm o yarn per gestionar les dependències del projecte. Assegura't de mantenir les dependències actualitzades i utilitza versions específiques per evitar problemes de compatibilitat.
Exemple de package.json
{ "name": "large-typescript-project", "version": "1.0.0", "scripts": { "build": "tsc", "start": "node dist/index.js", "test": "jest" }, "dependencies": { "express": "^4.17.1" }, "devDependencies": { "typescript": "^4.4.3", "jest": "^27.0.6", "@types/jest": "^27.0.1", "@types/node": "^16.7.10" } }
Estratègies de Refactorització
La refactorització és el procés de millorar el codi sense canviar-ne el comportament extern. Aquí tens algunes estratègies per refactoritzar projectes grans:
- Extracció de Funcions: Divideix funcions grans en funcions més petites i específiques.
- Renombrament de Variables: Utilitza noms de variables descriptius.
- Eliminació de Codi Mort: Elimina codi que ja no s'utilitza.
- Simplificació de Condicionals: Simplifica les estructures condicionals complexes.
Exemple de Refactorització
Abans de la refactorització:
function processUser(user: any) { if (user !== null && user !== undefined) { if (user.age >= 18) { console.log('User is an adult'); } else { console.log('User is a minor'); } } }
Després de la refactorització:
function isUserValid(user: any): boolean { return user !== null && user !== undefined; } function isUserAdult(user: any): boolean { return user.age >= 18; } function processUser(user: any): void { if (isUserValid(user)) { console.log(isUserAdult(user) ? 'User is an adult' : 'User is a minor'); } }
Exercicis Pràctics
Exercici 1: Estructura del Projecte
- Crea una estructura de projecte seguint l'exemple proporcionat.
- Implementa un servei senzill que gestioni una llista de productes.
Exercici 2: Configuració del Compilador
- Configura el
tsconfig.json
per al teu projecte. - Afegeix alias per a les rutes dels mòduls.
Exercici 3: Modularització
- Divideix el codi en mòduls seguint l'exemple proporcionat.
- Implementa una classe de servei que gestioni usuaris i productes.
Exercici 4: Refactorització
- Refactoritza una funció gran en funcions més petites i específiques.
- Renombra variables per fer-les més descriptives.
Conclusió
En aquest tema, hem explorat com utilitzar TypeScript en projectes grans. Hem après a estructurar el projecte, configurar el compilador, modularitzar el codi, gestionar dependències i aplicar estratègies de refactorització. Aquests conceptes són essencials per mantenir el codi organitzat, llegible i fàcil de mantenir a mesura que el projecte creix en complexitat i mida.
Amb aquests coneixements, estàs preparat per gestionar projectes grans amb TypeScript de manera eficient i efectiva. En el proper tema, explorarem com contribuir a TypeScript i participar en la seva comunitat de desenvolupadors.
Curs de TypeScript
Mòdul 1: Introducció a TypeScript
- Què és TypeScript?
- Configuració de l'entorn de TypeScript
- Tipus bàsics
- Anotacions de tipus
- Compilació de TypeScript
Mòdul 2: Treballant amb Tipus
Mòdul 3: Tipus Avançats
Mòdul 4: Funcions i Mòduls
- Tipus de Funció
- Paràmetres Opcional i per Defecte
- Paràmetres Rest
- Mòduls i Espais de Noms
- Decoradors
Mòdul 5: Programació Asíncrona
Mòdul 6: Eines i Millors Pràctiques
- Linting i Formatació
- Proves de Codi TypeScript
- TypeScript amb Webpack
- TypeScript amb React
- Millors Pràctiques