-
Notifications
You must be signed in to change notification settings - Fork 13k
Closed
Closed
Copy link
Labels
BugA bug in TypeScriptA bug in TypeScriptFix AvailableA PR has been opened for this issueA PR has been opened for this issue
Description
Bug Report
Basically I'm using &
types as if subclassing. BaseValue
has items
array with fewer properties, ExtendedValue
extends that with items
with more properties.
🔎 Search Terms
intersection, ampersand, override, inheritance. Also looked at the titles of first 2 pages of open issues.
🕗 Version & Regression Information
- This changed between versions 4.9.5 and 5.0.2
- There is an easy work-around, but I'm not sure if it should be necessary.
⏯ Playground Link
TypeScript 5.0.2 (error) vs 4.9.5 (OK)
💻 Code
type BaseItem = {
id: number;
}
type ExtendedItem = BaseItem & {
description: string | null
};
type BaseValue = {
// there are other fields
items: BaseItem[];
}
type ExtendedValue = BaseValue & {
// there are other fields
items: ExtendedItem[];
}
const TEST_VALUE: ExtendedValue = {
items: [ // ❌ ERROR: This is NOT allowed *iff* mixed types are used in `description`
{id: 1, description: null},
{id: 2, description: 'wigglytubble'},
]
};
🙁 Actual behavior
Seems to me like they should be compatible. Also these examples are ✅ allowed in TS 5.0.2 if description
only has uniform types, e.g.:
// ✅ Allowed: description has only strings
const ONLY_STRINGS: ExtendedValue = {
items: [
{id: 1, description: 'bollywoggle'},
{id: 2, description: 'wigglytubble'},
]
};
// ✅ Allowed: description has only nulls
const ONLY_NULLS: ExtendedValue = {
items: [
{id: 1, description: null},
{id: 2, description: null},
]
};
🙂 Expected behavior
Seems like it should be allowed.
🙄 Work-around
Typing ExtendedValue
with Omit<>
seems to fix the issue with no obvious downsides.
type ExtendedValue = Omit<BaseValue, 'items'> & {
// there are other fields
items: ExtendedItem[];
}
whzx5byb
Metadata
Metadata
Assignees
Labels
BugA bug in TypeScriptA bug in TypeScriptFix AvailableA PR has been opened for this issueA PR has been opened for this issue