当前位置: 首页 > 知识库问答 >
问题:

前端 - TypeScript 里如何提取一个对象数组里的一个变量类型?

澹台玉石
2023-05-23

问题背景:
如下图,我有个数组,是一个常量

const tabList = [
  { label: "攻略", name: "playground" },
  { label: "商城", name: "store" },
  { label: "论坛", name: "topic" },
  { label: "用户", name: "user" },
]

我现在想定义一个变量 current ,我想这个变量的值是 label 这四个字符串的其中一个。

我了解到,我可以重新声明一个 type Tab = "攻略"|"商城"... 这样一个类型,然后给 tabListcurrent 分别使用。

但是有没有一种方法直接让 Ts 提取出 tabListlabel 元素自动提取呢?有点类型体操的感觉

共有2个答案

贺立果
2023-05-23
const tabList = [
  { label: "攻略", name: "playground" },
  { label: "商城", name: "store" },
  { label: "论坛", name: "topic" },
  { label: "用户", name: "user" },
] as const; 

type TabList = typeof tabList;
type Label = TabList[number]["label"]; 
let current: Label; // Now, current can only be "攻略", "商城", "论坛", or "用户"
武功
2023-05-23
  const tabList = [
    { label: "攻略", name: "playground" },
    { label: "商城", name: "store" },
    { label: "论坛", name: "topic" },
    { label: "用户", name: "user" },
  ]

  type TabListLabel = typeof tabList[number]['label']; // 获取 tabList 中每个元素的 label 属性所组成的联合类型

  let current: TabListLabel;
    current = '攻略';
  current = '商城';
  current = '论坛';
  current = '用户';
    current = '其他'; // 报错:Type '"其他"' is not assignable to type '"攻略" | "商城" | "论坛" | "用户"'

image.png

 类似资料:
  • rank ▲ ✰ vote url 12 851 228 1287 url 如何在一个函数里用全局变量? 如果我在一个函数里建了一个全局变量,那么我怎么在另一个函数里使用这个全局变量? 我需要把这个全局变量赋值给这个函数的局部变量吗? 如果你要在别的函数里使用全局变量,只要在被调用全局变量函数的里事先用global声明一下: globvar = 0 def set_globvar_to_one(

  • 请考虑以下代码: 在foo中,的类型将是。 我想在中创建一个变量,它的类型是的泛型,在本例中是。 有没有办法做到这一点?谢谢。 编辑不幸的是(我想)我无法重写签名,因为函数是用不同类型的对象调用的,例如

  • 本文向大家介绍JavaScript 里的类数组对象,包括了JavaScript 里的类数组对象的使用技巧和注意事项,需要的朋友参考一下 很早以前我就知道可以把 arguments 转化为数组:[].slice.call(arguments),因为 arguments 是个类数组对象,所以才可以这么用。但是我一直不清楚什么叫做类数组对象( array-like objects) 今天看 Effect

  • 我正在尝试制作一个纸牌游戏,它有游戏类、纸牌类、玩家类、副牌类和手牌类。我想让它模拟现实生活,你从一副牌中抽5张牌到你手上 我让我的班级玩家将所有的卡片添加到一个叫做卡片的卡片组中。像这样: 它把它传递给我的班级甲板: 我在类手叫手创建了一个手数组列表: 如何将 5 个随机卡牌对象从我的套牌数组列表添加到我的手牌数组列表中?

  • 我有两个Java类,Product和ProductReview。ProductReview除了变量long id和String review外,还有一个名为Product的变量,该变量应包含类Product中的一个对象。例子: Products类有私有变量long id、String name和List评论(它也从Product评论类中获取评论)。产品类与Product评论有一对多的关联,反之亦然