SodaCoca 2023-10-30 16:37 采纳率: 50%
浏览 13

在 typescript 中,type first = typeof arr['length'] 的 first 为什么类型是 2 而不是 number ?

typescript
在 typescript 中,type first = typeof arr['length'] 的 first 为什么类型是 2 而不是 number ?

const arr: readonly [number, string] = [1, 'jack']

type first = typeof arr['length']

img

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-10-31 18:45
    关注

    【以下回答由 GPT 生成】

    这个问题是一个经典的 TypeScript 类型推断问题,其中涉及到 TypeScript 类型系统中的索引类型。

    在类型声明 const arr: readonly [number, string] 中,我们定义了一个只读元组 arr,它的类型是 [number, string]。这意味着 arr 只能包含两个类型分别为 numberstring 的元素,并且是一个只读数组。

    接下来,我们定义了类型 first,它是通过索引类型操作符 [] 来获取 arrlength 属性的类型。在这个例子中,arrlength 属性是一个常数,它的值是数组的长度,也就是 2。因此,类型 first 推断为 2

    为什么不是 number 呢?这是因为 TypeScript 在这种情况下会对数字字面量进行字面量类型推断。在 TypeScript 中,数字字面量具有自己的特定类型,例如 1 的类型是 12 的类型是 2。所以当我们使用索引类型操作符来获取 arrlength 属性时,TypeScript 推断出这个属性是一个数字字面量类型,具体的值就是 2

    如果你想要将类型 first 更改为 number,可以通过使用 keyof 关键字来替代索引类型操作符,示例如下:

    const arr: readonly [number, string] = [1, 'jack'];
    type First = keyof typeof arr;  // "0" | "1"
    

    在这个示例中,keyof typeof arr 是取 arr 的索引类型,它的值是 "0" | "1",表示数组的索引位置。这样一来,类型 First 将被推断为 "0" | "1",代表了数组的索引位置,而不是字面量类型 2

    希望这样解答能够帮助你理解为什么类型 first2 而不是 number。如果有任何疑问,请随时提问。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 10月30日

悬赏问题

  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表