microsoft / microsoft/TypeScript

Cannot bracket-index into an object after checking it's existence on that object.

Ouverte
#44,117 4 commentaires 0 réactions 1 personne assignée Voir sur GitHub

@DanielRosenwasser y travaille déjà.

Depuis le 20/5/2021.

Breaking Change
Langage dominant
Go
Étoiles
111k
Forks
14.3k
Merge moyen
2 j 4 h
PR mergées (30 j)
132

Description

Bug Report

Cannot bracket-index into an object after checking it's existence on that object.

The same failure was reported in #43651, but I couldn't find a separate discussion or a ticket for this.

🔎 Search Terms
  • implicitly has an 'any' type
  • bracket indexing
🕗 Version & Regression Information

Worked in 4.2.4. Starts to break since 4.3.0-beta

⏯ Playground Link

Playground link

💻 Code
interface A {}
function foo(a:A) {
    if ('abc' in a) {
        const z = a;
        // Element implicitly has an 'any' type because expression of type '"abc"' can't be used to index type 'A'.
        // Property 'abc' does not exist on type 'A'.
        return z['abc']; 
    }
}
🙁 Actual behavior

Compiler gives an error that you cannot index into type 'A', since 'abc' does not exist in type 'A'

🙂 Expected behavior

Compiler recognizes the existence check and does not give an error.

Observation

This seems to be caused by the improvement in the control flow analysis/type inference. Before the type of z in the below example was 'never' prior to TS4.3, but now the compiler recognizes z being type A

Question : I have one question though, is it by design that it's allowed to index into never types?

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Évaluation

Cette issue n'a pas encore été évaluée.

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.