4 ms·
If you want to be purely structural, why even use an interface? You can just as easily write: type MyType = { a: number, b: string };
by leshow 9y ago
If you want to be purely structural, why even use an interface? You can just as easily write:
type MyType = { a: number, b: string };
- eridius 9y agoThat's basically the same thing as using an interface. An interface is just a more formal way of declaring it.
- dvlsg 9y agoIt affects things like previews / mouse hovers in editors like vscode, too. Interfaces will show the interface name, types will show the structure.
- eridius 9y agoIn VSCode if you want to see the structure of an interface, hold command (on macOS; not sure about windows/linux) while hovering.
- leshow 9y agoThe difference IMO is that the interface is still a nominal declaration. With it you have a named type, while the alias is purely structural. in TS/Flow I prefer to use the type alias ubiquitously, however in other typed languages I prefer being more nominal. In Purescript, which supports both methods also, I almost always fully declare the type.
- eridius 9y agoTypeScript interfaces are purely structural. The effect on the type system of using `interface Foo { … }` vs `type Foo = { … }` is the same. I mean, the whole point of interfaces in TypeScript is that it's structural typing, and if you want nominal typing you use a class. The only difference is readability and how tools like VSCode treat it (e.g. if you hover over something typed as an `interface`, VSCode just shows the interface name, though you can hold a modifier to see the whole definition). All that said, if you want to exclusively use type aliases, you're certainly free to do so. But I expect most TypeScript developers will consider that to be a bit odd.