Creating new TypeScript types using template literal types

Creating new TypeScript types using template literal types

Share

TypeScript is way more powerful than I give it credit for. I recently learned about creating new TypeScript types using template literal types, and I was pretty surprised to know that TypeScript can do that.

Let us assume we wanted to create a type for the CSS properties margin and padding, which can have sub-attributes such as top, right, left, and bottom. Instead of recreating those, we can use template literal types to achieve this

type Attribute = "margin" | "padding";
type SubAttribute = "top" | "right" | "bottom" | "left";

type MergedProperty = `${Attribute}-${SubAttribute}`;
JavaScript

and this would result in a new merged property:

type MergedProperty = "margin-top" | "margin-right" | "margin-bottom" | "margin-left" | "padding-top" |"padding-right" | "padding-bottom" | "padding-left";
JavaScript

And this helps us in creating new TypeScript types using template literal types. Pretty cool, right?

0
Would love your thoughts, please comment.x
()
x
\r\n <\/div>\r\n<\/div>\r\n","isUserRated":"0","version":"7.6.28","wc_post_id":"5122","isCookiesEnabled":"1","loadLastCommentId":"0","dataFilterCallbacks":[],"phraseFilters":[],"scrollSize":"32","is_email_field_required":"1","url":"https:\/\/www.wisdomgeek.com\/wp-admin\/admin-ajax.php","customAjaxUrl":"https:\/\/www.wisdomgeek.com\/wp-content\/plugins\/wpdiscuz\/utils\/ajax\/wpdiscuz-ajax.php","bubbleUpdateUrl":"https:\/\/www.wisdomgeek.com\/wp-json\/wpdiscuz\/v1\/update","restNonce":"fb155c7c54","is_rate_editable":"0","menu_icon":"https:\/\/www.wisdomgeek.com\/wp-content\/plugins\/wpdiscuz\/assets\/img\/plugin-icon\/wpdiscuz-svg.svg","menu_icon_hover":"https:\/\/www.wisdomgeek.com\/wp-content\/plugins\/wpdiscuz\/assets\/img\/plugin-icon\/wpdiscuz-svg_hover.svg"}; var wpdiscuzUCObj = {"msgConfirmDeleteComment":"Are you sure you want to delete this comment?","msgConfirmCancelSubscription":"Are you sure you want to cancel this subscription?","msgConfirmCancelFollow":"Are you sure you want to cancel this follow?","additionalTab":"0"}; /* */-->