我想从对象数组中生成类型.

const names = [
  {
    name: 'Bob'
  },
  {
    name: 'Jane'
  },
  {
    name: 'John'
  },
  {
    name: 'Mike'
  },
]

结果应该如下所示:

type NameType = 'Bob' | 'Jane' | 'John' | 'Mike'

我看到了很多参考资料,比如这个typescript-types-from-arrays

但这些示例始终使用字符串数组作为资源. 比如:

const array = ['one', 'two',...]

它工作得无懈可击.

但我想要做的是生成具有如下array.map的类型:

const allNames = names.map((item) => item.name) as const;

type NameType = typeof names[number];

但这导致了一个:

A 'const' assertions can only be applied to references to
enum members, or string, number, boolean, array, or object literals.

下面是我try 做的一个可玩的例子: Stackblitz

i want to use the function getName() with IntelliSense to know which names are available in the names array. like this: enter image description here

推荐答案

这仍然可以使用as constindexed access types的组合来实现

const names = [
  {
    name: 'Bob'
  },
  {
    name: 'Jane'
  },
  {
    name: 'John'
  },
  {
    name: 'Mike'
  },
] as const

type NameType = typeof names[number]['name'];
// type NameType = "Bob" | "Jane" | "John" | "Mike"

TypeScript Playground

Javascript相关问答推荐

使用axios.获取实时服务器时的404响应

InDesign—创建一个独立的窗口,在文档中进行更正时保持打开状态

当试图显示小部件时,使用者会出现JavaScript错误.

MathJax可以导入本地HTML文档使用的JS文件吗?

引用在HTMLAttributes<;HTMLDivElement>;中不可用

数字时钟在JavaScript中不动态更新

在react JS中映射数组对象的嵌套数据

如何在Vue 3中创建自定义 Select 组件,并将选项作为HTML而不是props 传递?

提交链接到AJAX数据结果的表单

根据一个条件,如何从处理过的数组中移除一项并将其移动到另一个数组?

从另一个数组中的对应行/键值对更新数组中的键值对对象

如何在FastAPI中为通过file:/URL加载的本地HTML文件启用CORS?

Next.js中的服务器端组件列表筛选

FireBase云函数-函数外部的ENV变量

如何使用Astro优化大图像?

在没有任何悬停或其他触发的情况下连续交换图像

在ChartJS中使用spanGaps时,是否获取空值的坐标?

ReactJS在类组件中更新上下文

带元素数组的Mongo聚合

在特定区域的图像上 Select x和y,并在其上创建边框