问一个typescript类型问题?

作者站长头像
站长
· 阅读数 22

给定一条数据结构(API数组里面的个数是未知的)如下所示

const api = [
    {
        name: 'pageA',
        table: true
    },
    {
        name: 'pageB',
    }
]

如何推导出类似这样的类型

type Result = {
    pageA: boolean
    pageB: unknown
}

即 name 作为key, 如果存在table即为boolean类型,否则为unknown类型ts的大神们,这个该如何写啊,百度,谷歌都折腾了,还问了gpt也不行,就是值推不出来我写的是这样的

const api = [
    {
        name: 'pageList',
        table: true
    },
    {
        name: 'pageAdd',
        table: false
    }
] as const;

type Ret<T extends readonly { name: string; table?: boolean }[]> = {
    [K in T[number]['name']]:  // 这里不会写
};
type Api = Ret<typeof api>;
回复
1个回答
avatar
test
2024-06-26
const api = [
  {
    name: 'pageList',
    table: true,
  },
  {
    name: 'pageAdd',
  },
] as const;

type Ret<T extends readonly {name: string; table?: boolean}[]> = {
  [K in T[number]['name']]: Extract<T[number], {name: K}> extends {
    table: boolean;
  }
    ? boolean
    : unknown;
};

type Api = Ret<typeof api>;
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容