网站LOGO
白雾茫茫丶
页面加载中
11月21日
网站LOGO 白雾茫茫丶
记录学习、生活和有趣的事
菜单
  • 热评
    用户的头像
    首次访问
    上次留言
    累计留言
    我的等级
    我的角色
    打赏二维码
    打赏博主
    TS 小技巧: 使用元组生成联合类型
    点击复制本页信息
    微信扫一扫
    文章二维码
    文章图片 文章标题
    创建时间
  • 一 言
    确认删除此评论么? 确认
  • 本弹窗介绍内容来自,本网站不对其中内容负责。
    • 复制图片
    • 复制图片地址
    • 百度识图
    按住ctrl可打开默认菜单

    TS 小技巧: 使用元组生成联合类型

    谢明伟 · 原创 ·
    前端开发 · TypeScript
    共 909 字 · 约 1 分钟 · 2286
    本文最后更新于2024年06月04日,已经过了170天没有更新,若内容或图片失效,请留言反馈

    前言

    在我们使用 TypeScript 开发业务的时候,也许你会遇到一个这样的问题:我们如何根据一个数组的值得到一个联合类型?
    这里向大家介绍一个开发小技巧:使用元组生成联合类型

    开发场景

    我们看下面一段 ts 代码:

    ts 代码:
    const colors = ['red','green','orange','blue']; // 这里 ts 解析的是 string[]
    
    // 这里的 value 类型该如何标注,使它的值只能是 colors 中的值
    const setColors = (value:?) => {
      console.log('value',value)
    };

    我们总不能手动去写成这样:

    ts 代码:
    type Colors = 'red' | 'green' | 'orange' | 'blue';

    这样显得我们很呆,我们应该根据 colors 自动生成一个联合类型,做法也很简单:

    ts 代码:
    // 1. 先将 colors 转成元组类型,这里 ts 解析的是 readonly ["red", "green", "orange", "blue"]
    const colors = ['red','green','orange','blue'] as const; 
    
    // 2. 将元组类型转成联合类型
    type Colors = typeof colors[number];
    
    // 这里的 value 类型该如何标注,使它的值只能是 colors 中的值
    const setColors = (value:Colors) => {
      console.log('value',value)
    };

    这样我们就可以完成 ts 的类型检查了:

    声明:本文由 谢明伟(博主)原创,依据 CC-BY-NC-SA 4.0 许可协议 授权,转载请注明出处。

    还没有人喜爱这篇文章呢

    现在已有

    4

    条评论
    我要发表评论
    1. 头像
      · · 河北-秦皇岛
      • 等级:Lv.3
      • 角色:访客
      • 在线:三月内
      头像
      沙发

      “元祖”,这是第几代祖啊(标题)

      评论
      1. · · 广东-深圳
        • 角色:博主
        • 在线:本月
        头像

        哈哈,元祖是 TypeScript 中的一种术语而已

        评论
        1. · · 海外
          • 等级:Lv.1
          • 角色:访客
          • 在线:很久之前
          头像

          哈哈哈,这个应是“元组”……

          评论
          1. · · 广东-深圳
            • 角色:博主
            • 在线:本月
            头像

            恩,感谢纠正,我查了下,两种叫法都有,不过官方是元组,以官方为准

            评论
    博客logo 白雾茫茫丶 记录学习、生活和有趣的事 51统计 百度统计
    MOEICP 萌ICP备20236860号 ICP 粤ICP备2023007649号 ICP 粤公网安备44030402006402号

    💻️ 谢明伟 33分钟前 在线

    🕛

    本站已运行 2 年 325 天 2 小时 49 分

    🌳

    自豪地使用 Typecho 建站,并搭配 MyLife 主题
    白雾茫茫丶. © 2022 ~ 2024.
    网站logo

    白雾茫茫丶 记录学习、生活和有趣的事