如何为从数组创建的动态生成的对象创建通用类型

时间:2019-06-11 05:01:21

标签: typescript generics string-literals typescript-generics

我正在尝试为从道具数组生成对象的函数生成类型定义,但是我遇到了问题。

问题是在{ [K in T]: boolean }中,我无法遍历类型T。

这就是我想要做的:

const createObject = <T extends string[]>(props: T): { [K in T]: boolean } => {
  return props.reduce((acc: any, prop: string) => {
    acc[prop] = true
    return acc
  }, {})
}

谢谢

1 个答案:

答案 0 :(得分:3)

只是一些解决方法...在这里

const createObject = <T extends string>(props: T[]): {[K in T]: boolean} => {
  return props.reduce((acc: any, prop: string) => {
    acc[prop] = true;
    return acc;
  }, {});
};

const testObj = createObject(['one', 'two']);
const one = testObj.one;
const two = testObj.two;
const three = testObj.three; // ERROR