microsoft / microsoft/TypeScript
Suspected breaking change with pushing and assigning a 'derived' value into a 'base' array
Nobody has claimed this yet.
- Dominant language
- Go
- Stars
- 111k
- Forks
- 14.3k
- Avg merge
- 1d 19h
- Merged PRs (30d)
- 117
Description
🔎 Search Terms
inline assignment array derived base push 'Object literal may only specific known properties'
🕗 Version & Regression Information
- This changed between versions 4.9.5 and 5.0.4
⏯ Playground Link
💻 Code
interface Base {
id: number;
}
interface Derived extends Base {
name: string;
}
const items: Base[] = [];
let item1: Derived;
let item2: Derived;
item1 = { id: 1, name: 'this is ok regardless' };
items.push(item1);
items.push((item2 = { id: 2, name: 'this is NOT ok in 5.0.4, but is ok in 4.9.5' }));
🙁 Actual behavior
'Object literal may only specific known properties' error
🙂 Expected behavior
The code should not produce an error
Additional information about the issue
It is possible that this is a change to the order in which types are inferred, but I have been unable to find any details in the documentation/changelog.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the linked TypeScript Playground reproduction and compare it under 4.9.5 and 5.0.4. Trace type inference and checking for the assignment expression passed to items.push; done means the sample compiles without the excess-property error while preserving the Base[] and Derived relationship.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- compilers
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100