Posiadanie tej deklaracji interfejsu:

interface Thing1 {
    [key: string]: string;
    x: number;
}

Maszynopis, przy jednoczesnym skompilowaniu, rzuca błąd "TS2411: Numer typu" X "typu nie jest przypisany do typu indeksu ciągów" String "

Brzmi legitę.

Jednak tak szybko, jak użyłem literału obiektu jako moją indeksowaną wartość:

interface Foo {}
interface Thing2 {
    [key: string]: Foo;
    foo: number;
}

... Nie narzeka już, co brzmi mi dziwne jak number jest nadal innym typem niż {x1}}

Jakiś pomysł z tego powodu?

Uwaga: Korzystanie z maszynopis: 2.1.5

1
Frédéric Camblor 17 luty 2017, 17:12

1 odpowiedź

Puste interfejsy są kompatybilne z prostymi typami (numer, ciąg). Używane maszyny nie będzie narzekać, jeśli piszesz to:

let c: Foo = 3;

Dlatego w Thing2 Restecript Wnioskowanie nadal widać foo jako kompatybilny z numerem. Jednak gdy podpis indeksu jest łagodzący jak w Thing1, wszyscy członkowie powinni być ciągami (jak wspomniano).

1
kdev 17 luty 2017, 15:52