【发布时间】:2021-10-26 03:00:23
【问题描述】:
有没有办法转换命名/标记元组
type Tup = [a: string, b: number];
反对
type Obj = {
a: string;
b: number;
}
最后一次尝试无效
type Map1<Container extends unknown[]> = {
[K in keyof Container]: Container[K];
};
type Map2<Container extends Record<PropertyKey, any>, Replace> = {
[K in keyof Container]: Replace;
};
let c1 : Map1<Tup> = {
'a' : 's',
'b' : 1,
};
let c2 : Map2<Tup> = {
'a' : 's',
'b' : 1,
};
谢谢
【问题讨论】:
-
@Andikac 这是不可能的。标签仅用于可读性/调试。可以将元组减少为对象表示,但输出将是
{0:string, 1: number}。看到这个答案stackoverflow.com/questions/69299590/… -
鉴于
[a: string, b: number]和[c: string, d: number]类型相同,没有原则性的方法可以将该单一类型转换为{a: string, b: number}而不是{c: string, d: number}。这些标签并不是明显的类型的一部分。如果您愿意传入像RemapTupleKeys<Tup, ["a", "b"]>这样的名称元组,那么有办法做到这一点(例如this code)。如果你想把它写成答案,请告诉我。 -
@captain-yossarian 我需要“重载”实现函数 FnParam(a: string, b: number) {} function FnDestructure({a, b} : TupleToObject
> ) {},减少到 {0:string, 1: number} 不起作用 -
@jcalz 是的,请写下来作为答案,在等待 Roberto Zvjerković 评论中的此功能时,这是一个不错的选择
标签: typescript