首页 > 解决方案 > 如何将字符串数组 const 映射到联合类型

问题描述

我有一个字符串数组,我想从中定义一个新类型,其中属性实际上是数组中的元素。有不同种类的数组,我有一个函数可以根据输入数组返回不同的类型。


const RGBColor = ["R" , "G" ,  "B"] as const
const YRBColor = ["Y" , "R" ,  "B"] as const

function Map<TInputColor extends readonly string[]>(x: TInputColor): TOutputColor<TInputColor>;

如果输入为 RGBColor,则输出类型为

{
   R: number;
   G: number;
   B: number;
}

如果输入为 YRBColor,则输出类型为

{
   Y: number;
   R: number;
   B: number;
}

那么,我应该如何定义 TOutputColor?

TOutputColor<TInputColor>
{
   ???????
}

标签: typescript

解决方案


使用映射类型:

type TOutputColor<TInputColor extends readonly string[]> = {
  [K in TInputColor[number]]: number;
};

推荐阅读