Compatibilité Type dactylographiée est basé sur structurel sous-typage, pas typage nominal. Cela dit, tenez compte des deux définitions d'interface suivantes:
interface IFoo { X: number }
interface IBar { X: number; Y: number }
Est-ce que IBar
IFoo
étendent? Mais est-ce que IFoo
est compatible avec IBar
? Oui.
Les membres de IFoo
sont un sous-ensemble de IBar
membres, vous pouvez ainsi assigner une IBar
-IFoo
. Mais cela ne fonctionne pas dans l'autre sens:
var x: IFoo;
var y: IBar;
x = y // all good
y = x // type error, x has no Y member
De cette façon dactylographiée tous les types sont compatibles avec Object
si vous pensez que l'interface vide. De cette façon, vous pouvez passer n'importe quelle valeur tapuscrite valide aux fonctions acceptant Object
et bien jouer avec la façon dont les librairies Javascript sont écrites.
Je suggère de lire Type Compatibility dans les docs et le dernier paragraphe à propos de Sous-type vs Affectation.
Ok, c'est essentiellement l'explication que j'attendais (après avoir remarqué que je pouvais aussi assigner un bool à une interface vide que j'ai définie appelée Bool, qui est isomorphe à Object). Je comprends structurel contre nominal, mais ne m'attendais pas à ce qu'il s'applique aux types de non-référence. J'imagine que ce n'est que du son dans la mesure où Object a vraiment une interface vide (étant donné qu'il y a probablement des choses que je peux faire à un objet que je ne peux pas faire avec un nombre ou une chaîne primitive). – Roly
Je suis content de l'explication, alors j'ai accepté la réponse. Il s'avère que je me suis fait mordre pas parce que le nombre
Je suppose que voici un sens dans lequel le nombre