こんにちは
以下のようにしてみると、いかがでしょうか?
フォントのサイズに関する型や、具体的なサイズの情報を集めたファイル名を仮に fontSize.ts
とします。これに以下のように、TFontSize
型を定義します。(※先頭のT
は私が個人的な慣習として型名につける接頭辞ですので、型名は適宜変えて下さい)
typescript
1export const FONT_SIZE = {
2 s: 12,
3 b: 14,
4 m: 16,
5 l: 20,
6 xl: 24
7} as const;
8
9export type TFontSize = keyof typeof FONT_SIZE;
10
11export const DEFAULT_SIZE = FONT_SIZE.m;
12
上記のようにすると、 TFontSize
は、実質的に "s" | "b" | "m" | "l" | "xl"
として機能するので、たとえば、以下のようなコンポーネントText
tsx
1import React from 'react';
2import styled from 'styled-components';
3import { TFontSize, FONT_SIZE, DEFAULT_SIZE } from "./fontSize";
4
5type TProps = {
6 size?: TFontSize;
7}
8
9const Text = styled.span`
10 font-size: ${(props: TProps) => props.size ? FONT_SIZE[props.size] : DEFAULT_SIZE}px;
11`;
12
13export default Text;
14
15
16
を作ったとして、これを利用するときに
tsx
1<Text size="m">Hello World</Text>
とは書けますが、
tsx
1<Text size="medium">Hello World</Text>
は、FONT_SIZE
のキーに "medium"
が無いのでエラーになります。
以上、参考になれば幸いです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/29 23:17
2020/03/29 23:31