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)