microsoft / microsoft/TypeScript

Type infer issue in interfaces with internal properties

Offen
#42,716 5 Kommentare 0 Reaktionen 1 zugewiesene Person Auf GitHub ansehen

@rbuckton arbeitet bereits daran.

Seit 10.2.2021.

Rescheduled
Vorherrschende Sprache
Go
Sterne
111k
Forks
14.3k
Ø Merge
1 T. 19 Std.
Gemergte PRs (30 T.)
117

Beschreibung

Bug Report

🕗 Version & Regression Information

4.1.3 & 4.2.0-dev the same

⏯ Playground Link

https://www.typescriptlang.org/play?ts=4.2.0-beta#code/JYOwLgpgTgZghgYwgAgEJwM4oN4ChkHKgbAAmEAXMnobcgG5UgCuAtgEbQDc+hAvrgG5QkWIhQANZBAAekEKQxpMOXgWJlK1NXUbIAjDoG04TNpyg9aMgPxmO3QbmHho8JMgCa0uRAVL0LG1aDXIqGjoCPQAmIx1TZBYHSx0ATztE80chETdxZAAtH3lFZSCI9RASMODIhioAZjjaAC8MpIseIQQAeyqwBmj7C2QAXmRongAbCAH6fSp9AB9J52AYZAAKemix0fHogEoGfTGJrmkpoPmz-R5cXv6GOCnmLSklrzOKoirNcJ0tD08yMABp4osAAyCe6PDA9GYAOimPQA5tsXm9DjwgA

💻 Code
interface Base {
    inside: {
        v: number;
    }
}

interface X extends Base {
    inside: {
        v: 1
    }
    a: number;
    x?: number;
}

interface Y extends Base {
    inside: {
        v: 2
    }
    a: number;
    y?: number;
}

interface Z extends Base {
    inside: {
        v: 3
    }
    z?: number;
}

const v2: number = 2;
let v1: 1|2;

if (v2 === 2) v1 = 2; else v1 = 1;

const value: X | Y = {
    inside: {
        v: v1
    },
    a: 10
};

console.log(value);
🙁 Actual behavior

Type '{ inside: { v: 1 | 2; }; a: number; }' is not assignable to type 'X | Y'.
Type '{ inside: { v: 1 | 2; }; a: number; }' is not assignable to type 'Y'.
Types of property 'inside' are incompatible.
Type '{ v: 1 | 2; }' is not assignable to type '{ v: 2; }'.(2322)

🙂 Expected behavior

No error ^^

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Bewertung

Dieses Issue wurde noch nicht bewertet.

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.