#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