2 votes

Typescript assigne à 'Object' un type spécifique au lieu de 'any'

A cause des vérifications --strict_checks et des vérifications eslint de typescript, j'essaie de corriger quelques nouvelles erreurs dans mon code. Exemples de code ci-dessous pour tout ce que j'explique. Disons que j'ai un objet a, et que je veux le spécifier directement en tant que map pour contourner certaines erreurs. Je ne peux pas utiliser le mot-clé "any". Voici ce que j'essaie de faire :

isEquivalent(a: Object, b: Object): boolean {
   const aObject: {[index: string]: Object} = a;
   const bObject: {[index: string]: Object} = b;
}

Lien vers l'aire de jeu de typecript avec l'extrait de code réel : aquí Mais cela provoque une erreur :

erreur TS2322 : Le type "Object" n'est pas assignable au type "{[index : string] : Objet ; }'. Le type 'Object' est assignable à très peu d'autres types. Vouliez-vous utiliser le type 'any' à la place ? La signature de l'index est manquante dans le type 'Object'.

Quelqu'un peut-il m'indiquer la solution pour le type à spécifier comme objet, sans utiliser "any" ? Ou si ce n'est pas possible, merci de me le faire savoir.

1voto

T.J. Crowder Points 285826

const aObject: {[index: string]: Object} = a; attribue a (de type Object ) à aObject (de type {[index: string]: Object} un objet dont les noms de propriétés sont des chaînes de caractères et Object les valeurs des propriétés). Mais les Object n'est pas compatible avec l'affectation {[index: string]: Object} TypeScript affiche donc cette erreur.

Si vous voulez le forcer, vous pouvez faire un type d'assertion :

const aObj = a as {[index: string]: Object};

Mise à jour du lien vers l'aire de jeux

Mais Attention, les assertions de type désactivent la plupart du temps la vérification de type de TypeScript. L'appelant pourrait passer {a: 42} que es no a {[index: string]: Object} et TypeScript l'autoriserait parce que vous avez dit que le paramètre est juste Object mais vous le traitez alors comme {[index: string]: Object} .

C'est parfois approprié, mais vous pourriez envisager de donner aux paramètres le type {[index: string]: Object} au lieu d'utiliser une assertion de type dans la fonction. De cette manière, TypeScript peut s'assurer que seuls des objets correctement typés sont transmis.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X