2 votes

Est-il exact que `any[never]` est du type `any` ?

En unknown aux tuples, aux objets, aux nombres... Si vous y accédez avec [never] il est égal à never . Pourquoi donc any[never] se comportent-ils différemment ? La situation suivante est-elle cohérente, pourquoi ?

type test0 = number[never] // never
type test1 = object[never] // never
type test2 = string[never] // string?
type test3 = any[never]    // any?

type test4 = number[][never] // number
type test5 = object[][never] // object
type test6 = string[][never] // string
type test7 = any[][never]    // any
type test8 = {}[][never]     // {}

1voto

devilmaster Points 439

Je pense que c'est cohérent. never est un sous-type de tous les types. Il peut donc être assigné à n'importe quel autre type. Ainsi, si nous pouvons indexer avec never sans erreur de compilation :

declare let o: never;
declare let arr: any[];
arr[o] // not error, any

Le reste dépend simplement de ce qui peut être indexé. number y object n'ont pas de signatures d'index, de sorte que le résultat qu'il never . string est indexable et le résultat est un string donc string[never] es string . any est universellement indexable, et le résultat est any donc any[never] es any .

Pour les tableaux indexés avec never comme nous l'avons vu plus haut, est possible et nous donnera le type d'article, donc ces résultats sont cohérents.

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