ошибка не соотвествия типов

2 вопроса:

1: почему ts ругается на ${R[K]} (is not assignable to type string | ....) и как это исправить

2: как то можно сделать это же без явного привидения типа recordWithRoot as ...

const getRecordWithRoot = <T extends string, R extends {}>(
  root: T,
  record: R
) => {
  const recordWithRoot = {
    ROOT: root,
  };
  for (const key in record) {
    Object.defineProperty(recordWithRoot, key, {
      get: () => {
        return root + record[key];
      },
    });
  }

  return recordWithRoot as { [K in keyof R]: `${T}${R[K]}` } & { ROOT: T };
};

const some = getRecordWithRoot(`core/A` as const, {
  get A() {
    return `/a` as const;
  },
  get B() {
    return `/b` as const;
  },
});

// result
// ROOT => core/A
// A => core/A/a
// B core/A/b

Ответы (1 шт):

Автор решения: Qwertiy
const getRecordWithRoot = <T extends string, R extends {}>(
const getRecordWithRoot = <T extends string, R extends { [key: string]: string | number | bigint | boolean | null | undefined }>(

Playground

→ Ссылка