如何将元组联合转换为对象类型

我有一个类型InputData,要么是要么string是元组。我想将其转换为对象。

type InputType = File | string | boolean;
type InputData = string | [string, InputType]

type test = "username" | "password" | ["isAbove18", boolean] | ["photo", File];

在上面的类型中,只有string(给出了输入字段的名称)它的类型应该设置为string. 我有通用类型

type AddDefaultValues<Data extends InputData> = Data extends string ? [Data, string] : Data 
//AddDefaultValues<test> = ["username", string]| ["password", string] | ["isAbove18", boolean] | ["photo", File]

现在我的要求是将上面的类型映射到如下所示的对象。

{username: string, password: string, isAbove18: boolean, photo: File}

我尝试了很长时间,但什么也做不了。请帮我解决这个问题...

回答

您可以使用带键重命名的对象映射:

type test = "username" | "password" | ["isAbove18", boolean] | ["photo", File];

type ObjMap = {
  [K in test as K extends [infer F, infer _] ? F : K]: K extends [infer _, infer S] ? S : string;
};

游乐场链接

也可以看看:

  • 映射类型
  • 条件类型中的类型推断
  • 映射类型中的键重映射

以上是如何将元组联合转换为对象类型的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>