Tomáš Vavřinka
Tomáš Vavřinka

Reputation: 633

Typed object keys by enum - not assignable to type 'string | number | symbol'

It seems that my type is working as expected. Then can please someone help me to explain the error I get in its definition and how to fix it? I can not find a solution.

export enum Languages {
  Cs = 'cs',
  Sk = 'sk',
  En = 'en'
}

export type RouteDefinitionItem<T> = {
  name: string;
  pathname: { [index in T]: string };
  page: string;
};

const routes: RouteDefinitionItem<Languages>[] = [
  {
    name: 'home',
    pathname: {
      cs: '/',
      en: '/en',
      sk: '/sk'
    },
    page: '/home'
  }
];

error:

Type 'T' is not assignable to type 'string | number | symbol'.
  Type 'T' is not assignable to type 'symbol'.

Link to TypeScript playground.

Thank you in advance.

Upvotes: 1

Views: 780

Answers (1)

lei li
lei li

Reputation: 1342

export enum Languages {
    Cs = 'cs',
    Sk = 'sk',
    En = 'en'
}



export type RouteDefinitionItem<T extends keyof any > = {
    name: string;
    pathname: Record<T,string>;
    page: string;
};

const routes: RouteDefinitionItem<Languages>[] = [
    {
        name: 'home',
        pathname: {
          'cs':'',
          'en':'',
          'sk':''
        },
        page: '/home'
    }
];

UPDATED.

Upvotes: 1

Related Questions