Migration d'un Projet JavaScript vers Typescript : Une Transformation Épique

Salut à tous ! Aujourd'hui, nous allons entreprendre une transformation épique en migrant un projet existant en JavaScript vers Typescript. Notre projet se languit de profiter des avantages de Typescript pour améliorer la maintenabilité, la lisibilité et la robustesse du code ! 🏙️💻

Pourquoi Migrer vers Typescript ?

Avant de plonger dans le processus de migration, voyons pourquoi il est bénéfique de migrer un projet JavaScript vers Typescript :

  1. Sécurité de Typage : Typescript permet d'attraper les erreurs de type au moment de la compilation, réduisant ainsi les bugs à l'exécution.
  2. Autocomplétion et Documentation : Les éditeurs comme VSCode peuvent fournir une autocomplétion et une documentation améliorées grâce aux types.
  3. Refactorisation Facile : Typescript facilite la refactorisation du code en fournissant des outils pour renommer les variables et les fonctions de manière sécurisée.
  4. Grande Communauté et Écosystème : De nombreuses bibliothèques populaires offrent un support Typescript ou des fichiers de types, ce qui facilite l'intégration.

Étapes de la Migration

1. Initialisation du Projet Typescript

La première étape consiste à initialiser Typescript dans notre projet existant. Si ce n'est pas déjà fait, installe Typescript et configure un fichier tsconfig.json.

Installation de Typescript

npm install typescript --save-dev
npx tsc --init

Configuration de tsconfig.json

Voici une configuration de base pour tsconfig.json :

{
  "compilerOptions": {
    "target": "es6",
    "module": "commonjs",
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true,
    "outDir": "./dist",
    "rootDir": "./src"
  },
  "include": ["src/**/*"],
  "exclude": ["node_modules", "dist"]
}

2. Renommer les Fichiers en .ts ou .tsx

Renomme tous les fichiers JavaScript en fichiers Typescript. Pour les fichiers contenant du JSX (dans les projets React, par exemple), renomme-les en .tsx.

mv src/index.js src/index.ts
mv src/App.js src/App.tsx

3. Ajouter des Types Graduellement

Commence par ajouter des types aux variables et aux fonctions dans tes fichiers. Cela peut se faire progressivement, fichier par fichier, ou même fonction par fonction.

Exemple de Typage d'une Fonction

Avant (JavaScript)

function add(a, b) {
  return a + b
}

Après (Typescript)

function add(a: number, b: number): number {
  return a + b
}

4. Utiliser any comme Type Intermédiaire

Pendant la migration, il est acceptable d'utiliser any pour les variables ou les paramètres dont le type n'est pas encore clair. Cela permet de continuer à avancer sans bloquer sur des détails.

let data: any
data = fetchData()

5. Configurer les Bibliothèques Tiers

Certaines bibliothèques peuvent ne pas avoir de types disponibles. Dans ce cas, tu peux installer les types séparément ou créer des définitions de types personnalisées.

Installation des Types pour une Bibliothèque

npm install @types/lodash --save-dev

6. Corriger les Erreurs de Compilation

Typescript peut signaler des erreurs de compilation après l'ajout des types. Corrige ces erreurs progressivement en suivant les suggestions de Typescript.

7. Activer des Options Strictes

Une fois la migration avancée, active des options plus strictes dans tsconfig.json pour renforcer la sécurité de typage.

{
  "compilerOptions": {
    "strictNullChecks": true,
    "noImplicitAny": true,
    "strictFunctionTypes": true,
    "strictPropertyInitialization": true,
    "noImplicitThis": true,
    "alwaysStrict": true
  }
}

Exemples de Migration

Voyons quelques exemples concrets de migration de code JavaScript vers Typescript.

Exemple 1 : Composant React Fonctionnel

Avant (JavaScript)

import React, { useState } from 'react'

const Counter = () => {
  const [count, setCount] = useState(0)

  return (
    <div>
      <h1>Counter</h1>
      <p>Current count: {count}</p>
      <button onClick={() => setCount(count + 1)}>Increment</button>
    </div>
  )
}

export default Counter

Après (Typescript)

import React, { useState, FC } from 'react'

const Counter: FC = () => {
  const [count, setCount] = useState<number>(0)

  return (
    <div>
      <h1>Counter</h1>
      <p>Current count: {count}</p>
      <button onClick={() => setCount(count + 1)}>Increment</button>
    </div>
  )
}

export default Counter

Exemple 2 : Fonction Utilitaire

Avant (JavaScript)

function fetchData(url) {
  return fetch(url).then((response) => response.json())
}

Après (Typescript)

async function fetchData(url: string): Promise<any> {
  const response = await fetch(url)
  return response.json()
}

Conclusion

Migrer un projet JavaScript vers Typescript peut sembler être une tâche ardue, mais avec une approche progressive, cela devient tout à fait faisable. Cette transformation épique améliorera grandement la qualité de ton code.

Continue à explorer les vastes possibilités offertes par Typescript et reste curieux !

Tags

  • tutorial
  • typescript

Cet article à été posté le