parliament parliament - 14 days ago 5
TypeScript Question

Typescript literal types used as key to indexer

Is there any way to define a typescript literal type which can be used as a string key in an indexer?

type TColorKey = 'dark' | 'light';

interface ColorMap {
[period: TColorKey]: Color;
}


This throws the error:
An index signature parameter type must be 'string' or 'number'.

Answer

Yes, it is possible thanks to a new feature called Mapped types. Just make sure you're using nightly version of typescript compiler (typescript@next) because it's not in stable build yet (at the time I'm writing this).

type TColorKey = "dark" | "light";

type TColorMap = { [P in TColorKey]: Color };
Comments