Today I learned some funny differences between types and interfaces in typescript.
I used to think there was almost no practical difference between the type
and interface
and it all boils down to team preferences, but turned out these two behave quite differently when it comes to index signatures. The usage of interfaces can produce unexpected type incompatibilities (=TSC errors). Take a look at this example:
interface C {
[x:string]: number
}
interface D {
x: number
}
const d: D = { x: 1 };
const c: C = d; // error
// Type 'D' is not assignable to type 'C'.
// Index signature is missing in type 'D'.
But change the interface D
to type D
and it'll be alright.
You can read more about it here https://github.com/microsoft/TypeScript/issues/15300#issuecomment-371353444
Top comments (0)