[ TS 类型体操 ] 初体验之 Tuple to Object, Tuple to Union 与 Tuple to Nested Object

本文介绍了如何在 TypeScript 中实现 Tuple to Object、Tuple to Union 以及 Tuple to Nested Object 的转换。通过具体的测试用例和解题步骤,详细阐述了类型推断、in 操作符、PropertyKey、infer 关键字等在类型转换中的应用,帮助读者深入理解 TypeScript 泛型的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Tuple to Object

在本题中,我们将实现将一个数组转化为一个对象,这个对象的 key 与 value 必须是相同的,且 key\value 在该数组中

const tuple = ['tesla', 'model 3', 'model X', 'model Y'] as const

type result = TupleToObject<typeof tuple> // expected { tesla: 'tesla', 'model 3': 'model 3', 'model X': 'model X', 'model Y': 'model Y'} 

测试用例

import type { Equal, Expect } from '@type-challenges/utils'

const tuple = ['tesla', 'model 3', 'model X', 'model Y'] as const
const tupleNumber = [1, 2, 3, 4] as const
const tupleMix = [1, '2', 3, '4'] as const

type cases = [Expect<Equal<TupleToObject<typeof tuple>, { tesla: 'tesla'; 'model 3': 'model 3'; 'model X': 'model X'; 'model Y': 'model Y' }>>,Expect<Equal<TupleToObject<typeof tupleNumber>, { 1: 1; 2: 2; 3: 3; 4: 4 }>>,Expect<Equal<TupleToObject<typeof tupleMix>, { 1: 1; '2': '2'; 3: 3; '4': '4' }>>,
]

// @ts-expect-error
type error = TupleToObject<[[1, 2], {}]> 

根据题意与测试用例,我们可以提取出以下几点

1.需要传入一个 tuple 类型,且 tuple 中的类型不能是数组与对象
2.需要对传入的 T 进行遍历
3.返回一个对象,对象的 key/value 必须是相同的

相信通过前两篇文章的阅读,我们已经对这些条件相当熟悉了,所以我们就不在先通过 JS 来实现这个题目,直接使用 TS 来进行编写。

对传入的数据进行判断

在编写相关代码之前,我们先对测试用例中出现的知识点进行分析。在测试用例中,我们声明了一些数组并用 as const 将它们转化为字面量类型(literal type),在这之后再使用 typeof 将这些数组转化为 tuple。

当我们在使用 const 对变量进行声明时,如 const world = “world” 时,TS 会自动将 world

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值