Typescript 数组对象特定值的类型定义

Typescript 数组对象特定值的类型定义,typescript,Typescript,假设我有以下对象数组: const shapes = [ { name: 'circle', color: 'blue' }, { name: 'square', size: 42 }, { name: 'rectangle', color: 'blue' } ]; type ShapeName = typeof shapes[number]['name']; // ShapeName is type 'string' but I would want: 'circle

假设我有以下对象数组:

const shapes = [
    { name: 'circle', color: 'blue' },
    { name: 'square', size: 42 },
    { name: 'rectangle', color: 'blue' }
];

type ShapeName = typeof shapes[number]['name']; // ShapeName is type 'string' but I would want: 'circle'|'square'|'rectangle'
我想要一个类型“ShapeName”,它包含对象的名称属性的值。但是,尝试这样做只会将“字符串”作为类型提供给我。有没有办法把它缩小到“圆形”、“正方形”、“矩形”


定义对象数组时,只有在以后向其添加更多值才有意义。TypeScript假定情况就是这样,您可以稍后添加更多对象。。。它可能只提到了
name
属性的三个值,也可能没有。另外,一般来说,TypeScript推断
name
字符串
,这通常是您希望对象被推断为的。因此,在大多数情况下,
string
推理通常是一个非常好的主意

要告诉TypeScript这是一个固定数组,需要使用。它将数组文本转换为
只读
元组。像这样:

const形状=[
{名称:“圆圈”,颜色:“蓝色”},
{名称:“正方形”,尺寸:42},
{名称:“矩形”,颜色:“蓝色”},
]作为常量;
类型ShapeName=typeof形状[编号][“名称”];
//键入ShapeName=“circle”|“square”|“rectangle”
以下是TS游乐场链接: