根据列表中对象的属性定义Typescript类型

沙瓦沃

说我有一个对象列表,例如:

const TABS = [
  {
        name: 'Home',
        // other properties
  },
  {
        name: 'Profile',
        // other properties
  }
];

如何定义type Tab,这是列表中每个对象的“名称”字段的类型?基本上相当于

type Tab = 'Home' | 'Profile';

在上述情况下(但无需在两个定义中都重复“ Home”和“ Profile”)。

贾卡尔兹

只要TABS在编译时知道的值并且防止编译器将其类型扩展为诸如之类的值,这是可能的Array<{name: string}>您希望编译器记住放入属性的值的特定字符串文字类型name,而不仅仅是将它们视为strings。最简单的方法是在创建时数组文字使用const断言TABS

const TABS = [
  {
    name: 'Home',
  },
  {
    name: 'Profile',
  }
] as const; // <-- need this 

现在,编译器知道这TABS是一对对象,第一个对象具有name字符串文字类型属性"Home",而第二个对象具有name字符串文字类型属性"Profile"

此时,您可以只使用查找类型来获取类型name的数字(number)索引处的元素属性TABS

type Tab = (typeof TABS)[number]["name"];
// type Tab = "Home" | "Profile"

操场上的代码链接

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

根据Typescript中多个对象的同名属性创建对象类型?

在列表中,可以基于Typescript中的对象属性获取对象的对象类型。

对象属性路径的 TypeScript 类型定义

根据其他属性动态限制TypeScript中对象属性的类型

C# 根据列表属性从自定义对象列表中过滤掉重复项

TypeScript定义用于合并对象,但阻止对象属性中不同类型的合并

根据属性从列表中删除重复的对象

TypeScript中对象文字中的类型定义

如何定义要从TypeScript中的数组中获取其属性的对象的类型

从 Typescript 中的属性值推断对象的类型

Typescript 中对象类型定义的区别

根据 Typescript 中同级属性的泛型类型推断类型

如何在TypeScript中为具有动态属性的对象定义类型

在TypeScript中,为具有必需属性的任何对象定义一种类型

Typescript对象属性类型

根据Typescript中的对象数组创建对象类型

根据列表中对象的类型更改方法的返回类型

根据TypeScript中的参数在字典中定义函数的返回类型

如何根据 switch case 为 TypeScript 中的对象分配类型

根据属性中的值类型反序列化对象

根据Flow中的对象值定义联合类型

在Java中根据不同的对象类型修改列表的位置

根据属性值获取通用/列表中对象的索引

根据属性值检索列表中的不同对象

根据Java中的属性对对象列表进行分组

根据属性对不同列表中的对象进行分类

根据数组中的对象属性生成带有头部的列表

根据对象的属性之一在列表中查找索引

根据属性从列表中返回一个随机对象