microsoft / microsoft/TypeScript
*explicit* type guard passed to Array.filter does not narrow type
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Go
- Sterne
- 111k
- Forks
- 14.4k
- Ø Merge
- 1 T. 19 Std.
- Gemergte PRs (30 T.)
- 117
Beschreibung
Bug Report
🔎 Search Terms
array.filter, type guard, explicit, is
🕗 Version & Regression Information
TS 3.9.7–5.1.6, target version ES2019 or later (releases earlier than 3.9.7 didn’t have Object.fromEntries)
⏯ Playground Link
Playground link with relevant code
💻 Code
interface Element { type: Elem['type'], children: Node_[] }
interface CodeBlock extends Element { type: 'cb', children: string[] }
interface Field extends Element { type: 'f', name: string }
interface FieldList extends Element { type: 'fl', children: Field[] }
type Elem = CodeBlock | Field | FieldList
type Node_ = Elem | string
function getMeta2(fieldLists: Elem) {
return Object.fromEntries(
fieldLists.children
.filter((n: Node_): n is FieldList => typeof n !== 'string' && n.type === 'fl')
.flatMap((fl) => fl.children)
.map((f) => [f.name, f.children[0]?.toString()]),
)
}
🙁 Actual behavior
> .flatMap((fl) => fl.children)
Property 'children' does not exist on type 'Node_'.
Property 'children' does not exist on type 'string'.
🙂 Expected behavior
The return type of filter should be FieldList[]
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne mit dem verlinkten Playground und dem reduzierten Array.filter-Beispiel im Issue. Verfolge anschließend, wie der explizite type-guard callback geprüft wird und wie der Ergebnistyp von filter inferiert wird. Bestätige die Korrektur, indem du prüfst, dass der gefilterte Wert als FieldList[] behandelt wird und dass der anschließende flatMap-Zugriff akzeptiert wird.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- typescript
- Bereich
- compilers
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 35/100