Comments (6)
This is a surprising result. I'm not entirely sure about this but I think it stems from the fact that interfaces can be augmented. So there is no actual guarantee that the inferred type will stay the same with code changes.
Type literals can't be augmented so type literals have "inferable indexes". If you take a look at the function signature of Object.entries
you might see this kind of type:
type ObjectEntries = {
<T>(o: {
[s: string]: T;
} | ArrayLike<T>): [string, T][];
(o: {}): [string, any][];
}
As we see here... T
can only be inferred from an index signature. So since interface types don't have one... ye, the type is not inferred there.
from typescript.
Remember that interfaces types are ostensibly nominal, not structural. If you want structural typing, stick to type
.
TypeDoc has a handy @interface
tag that lets you document structural types as if they were interfaces, which is a nice middle-ground.
from typescript.
I might be misreading what you are saying but in the TS type system both interfaces and types are usually compared structurally. Nominal types can be achieved using classes with private properties.
from typescript.
@Andarist They're compared structurally but during compilation, references to interfaces are treated nominally (rather than the entire structure being inlined) until a comparison occurs. This is a big difference and has a lot of downstream effects (e.g. in mouseover tooltip behavior). There are also some rules regarding intersections that apply only to interfaces to keep their behavior consistent with nominal typing.
from typescript.
This is a combination of #15300 with #38520.
(Calling interfaces "nominally typed" is confusing at best, so let's desist from doing that.)
from typescript.
This issue has been marked as "Duplicate" and has seen no recent activity. It has been automatically closed for house-keeping purposes.
from typescript.
Related Issues (20)
- Type narrowing of condition leads to unexpected error for assignment HOT 3
- Increase the distinction between class and interface properties when defining a class or interface
- Add adaptation to class and interface property prompts HOT 1
- Weird behavior with recursive generic types HOT 2
- Array of unions changed to union of arrays in conditional type HOT 4
- tsserver requires `npm` to be installed on `neovim` trough `mason` HOT 2
- RangeError: Maximum call stack size exceeded when calling `getJsDocTags` on getter of class that implements itself
- Class constructors that early return another object still require fields to be assigned HOT 2
- [NewErrors] 5.7.0-dev.20240922 vs 5.6.2 HOT 6
- [ServerErrors][JavaScript] 5.7.0-dev.20240922 vs 5.6.2 HOT 3
- [ServerErrors][TypeScript] 5.7.0-dev.20240922 vs 5.6.2 HOT 7
- IsolatedDeclarations: emitted declarations inconsistent between `transpileDeclaration` API and TypeScript Playground HOT 1
- Inconsistent typechecking with require() in JS and TS HOT 5
- TypeScript fails to narrow union of native Error types HOT 5
- Typed JSON imports HOT 3
- Proposal: Expand `inferFromTypeArguments()` candidates to include heritage elements HOT 1
- `ReadonlySet` and `ReadonlyMap` are lacking `Symbol.toStringTag`
- Wrong type is generated by typescript HOT 6
- wrong type ordering generated by `tsc`? HOT 9
- Typing error when adding an element to a generic Map not catched by Typescript HOT 6
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from typescript.