0Pricing
TypeScript Academy · Leçon

Signatures d’index de chaînes et de nombres

Comprendre les règles et les particularités des clés numériques.

Signatures d’index de chaînes et de nombres est une leçon TypeScript Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage TypeScript Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours TypeScript Academy comprend 4 leçons au total.

Deux types de clés d’index

TypeScript prend en charge les signatures d’index de type chaîne et de type nombre. Elles se ressemblent, mais se comportent différemment en raison de la façon dont JavaScript stocke réellement les clés des objets.

Une signature d’index numérique

Une signature d’index numérique { [i: number]: T } décrit des objets indexés par position numérique — notamment les tableaux et les structures similaires aux tableaux.

type NumberList = { [index: number]: string }

const names: NumberList = { 0: "ana", 1: "leo" }
console.log(names[0]) // ana

JS convertit les clés numériques en chaînes

Voici le fait essentiel : les clés des objets JavaScript sont toujours des chaînes. Lorsque vous écrivez obj[0], le moteur stocke en réalité la clé sous forme de chaîne "0". TypeScript modélise cette réalité.

const obj: Record<string, string> = {}
obj[1] = "one"
console.log(obj["1"]) // one — same key!
console.log(Object.keys(obj)) // ["1"]

La règle de compatibilité

Comme une clé numérique est en réalité une chaîne en interne, TypeScript impose une règle : lorsqu’un objet possède à la fois une signature d’index numérique et une signature d’index de type chaîne, le type de valeur de l’index numérique doit pouvoir être affecté au type de valeur de l’index de type chaîne.

interface Mixed {
  [key: string]: string
  [index: number]: string // must match the string value type
}
const m: Mixed = { 0: "a", name: "b" }
console.log(m[0], m.name)

Pourquoi cette règle existe

Si obj[0] et obj["0"] désignent le même emplacement, le type de la valeur ne peut pas être numérique dans un cas et une chaîne dans l’autre. Le type de valeur de l’index numérique doit donc être un sous-type du type de valeur de l’index de type chaîne pour rester cohérent.

// This is an ERROR:
// interface Bad {
//   [key: string]: string
//   [index: number]: number // number not assignable to string
// }

Indexation numérique : les tableaux

Les tableaux sont le type indexé numériquement par excellence. Le type intégré Array<T> possède en pratique une signature d’index numérique, ce qui explique que arr[i] renvoie T.

const nums: number[] = [10, 20, 30]
const first: number = nums[0]
console.log(first + nums[2]) // 40

Les tuples sont aussi indexés numériquement

Les tuples reposent sur l’indexation numérique, mais associent des positions précises à des types précis. Un accès numérique hors limites utilise le type union des éléments ou est signalé.

const pair: [string, number] = ["age", 30]
const label: string = pair[0]
const value: number = pair[1]
console.log(label + ": " + value)

Un index de type chaîne autorise les deux types d’accès

Un objet doté d’une signature d’index de type chaîne accepte également un accès ressemblant à un accès numérique, car le nombre est d’abord converti en clé de type chaîne.

type Bag = { [key: string]: number }
const b: Bag = {}
b[5] = 100        // stored as key "5"
console.log(b["5"]) // 100

Un index numérique n’accepte pas les chaînes

L’inverse n’est pas vrai. Un objet dont le type possède uniquement une signature d’index numérique refuse les clés de type chaîne lors de la compilation, même si JS les autoriserait techniquement.

type OnlyNumbers = { [i: number]: string }
const o: OnlyNumbers = { 0: "x" }
// o.name = "y" // Error: property name not on number-indexed type
console.log(o[0])

Choisir entre les deux

Utilisez un index numérique pour les données semblables à une séquence et fondées sur des positions (listes, tuples). Utilisez un index de type chaîne pour les recherches nommées (dictionnaires, caches). En cas de doute, la chaîne constitue le choix le plus général.

type Positions = { [i: number]: { x: number; y: number } }
type ByName = { [name: string]: { x: number; y: number } }
const p: Positions = { 0: { x: 1, y: 2 } }
console.log(p[0].x)

Objet mixte pratique

Vous pouvez combiner les deux signatures lorsqu’un même type de valeur convient aux deux — ce qui est utile pour des conteneurs clairsemés similaires aux tableaux qui exposent également des emplacements nommés.

interface Flexible {
  [key: string]: number
  [index: number]: number
}
const f: Flexible = { 0: 1, total: 99 }
console.log(f[0] + f.total) // 100

Vérification rapide

Évaluez votre compréhension des signatures d’index de type chaîne et de type nombre.

Récapitulatif

Les signatures d’index de type chaîne et de type nombre diffèrent parce que JS stocke toutes les clés sous forme de chaînes et convertit les nombres en clés de type chaîne. Lorsque les deux existent, le type de valeur de l’index numérique doit pouvoir être affecté au type de valeur de l’index de type chaîne. L’indexation numérique modélise les tableaux et les tuples ; l’indexation par chaîne modélise les dictionnaires. Les objets indexés par chaîne acceptent les accès numériques, tandis que les objets indexés numériquement refusent les clés de type chaîne lors de la compilation.

Questions Fréquemment Posées

La leçon « Signatures d’index de chaînes et de nombres » est-elle gratuite ?

Oui — le texte complet de « Signatures d’index de chaînes et de nombres » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours TypeScript Academy, passe à CoddyKit PRO. Le cours TypeScript Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Signatures d’index de chaînes et de nombres » ?

Comprendre les règles et les particularités des clés numériques. Tu pratiques TypeScript Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer TypeScript Academy ?

Aucune expérience préalable n'est requise. TypeScript Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.

Combien de temps prend la leçon « Signatures d’index de chaînes et de nombres » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon TypeScript Academy ?

Oui. Chaque leçon TypeScript Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Définir des signatures d’index
  2. Signatures d’index de chaînes et de nombres
  3. Combiner clés connues et dynamiques
  4. Signatures d’index ou Record
← Retour à TypeScript Academy