Skip to content

Mapped generic types lose index signature #23080

Closed
@tyrielv

Description

@tyrielv

TypeScript Version: 2.9.0-dev.20180402

Search Terms: partial mapped types index signature enum

Code

enum Fruits {
    Mango = 0,
    Banana = 1
}

interface IFruitMetadata<T> {
    [Fruits.Mango]: T;
    [Fruits.Banana]: T;
}

const onSale1: IFruitMetadata<boolean> = {
    [Fruits.Mango]: true,
    [Fruits.Banana]: false
};

const onSale2: Partial<IFruitMetadata<boolean>> = {
    [Fruits.Banana]: true,
};

const onSale3: Pick<IFruitMetadata<boolean>, Fruits.Banana> = {
    [Fruits.Banana]: true,
};

onSale1[Fruits.Banana] = true;
onSale2[Fruits.Mango] = true;
onSale3[Fruits.Banana] = true;

Expected behavior:
No compile errors. This was the behavior in 2.7.2.
Actual behavior:
With noImplicitAny=true, the Partial and Pick versions of the type triggers error TS7017: Element implicitly has an 'any' type because type 'Partial<IFruitMetadata>' has no index signature.
Playground Link

#22892 looks like it might be related.

Metadata

Metadata

Assignees

Labels

BugA bug in TypeScriptFixedA PR has been merged for this issue

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions