Как «кросс-продуктовые» типы в машинописном тексте?

#typescript #typescript-typings

Вопрос:

Я хочу «кросс-продукт» двух типов.

Что я подразумеваю под «перекрестным продуктом типов», так это то, что, например, у меня есть 2 типа,

 type color = "red" | "green";
 

и

 type shade = "100" | "200" | "300";
 

Я хочу получить окончательный тип, который принимает только эти строковые значения

 "red.100"
"red.200"
"red.300"
"green.100"
"green.200"
"green.300"
 

Я знаю, что могу это сделать…

 type colorShade = "red.100" | "red.200" | "red.300" | "green.100" | "green.200" | "green.300";
 

… но, как вы можете видеть, по мере роста любого из списков мне придется обновлять тип colorScheme вручную. Как мне получить тип colorShade без необходимости colorScheme прямого редактирования вручную?

Ответ №1:

Вы можете использовать функцию под названием template literal types :

 type colorShade = `${color}.${shade}`
 

Документы: https://www.typescriptlang.org/docs/handbook/2/template-literal-types.html