Reactを使いこなすための最低限のTypeScriptの基礎

  • URLをコピーしました!

こんにちは、ゆうきです。

Reactを使いこなすために、最低限のTypeScriptの基礎を習得したい

そういった方に向けて、必須の基礎をコンパクトにまとめました。

これからTypeScriptを学ぶ方にうってつけの記事になってます。

目次

はじめに

TypeScriptはwebサービスのみならず、スマホアプリやデスクトップアプリ、なんならWeb3.0のツールなど、多種多様のシステムで使われる言語です。

だからこそ複雑な部分も多いですが、一般的に現場で仕事するWebエンジニアは、仕事を効率にこなす目的なら、TypeScriptの全てを理解する必要はありません。

仕事で使える最低限の部分だけ理解して、あとは実践しまくる。
それが一番早く上達します。

ここでは最低限の基礎をコンパクトにまとめています。

ReturnTypeとAwaited

関数の戻り値の型を取得するには、ReturnTypeを使います。

また、async awaitのような、非同期処理を行う関数の場合、その戻り値の型を取得するには、Awaitedで囲む必要があります。

export async function loader() {
  return {…}
}

type LoaderData = Awaited<ReturnType<typeof loader>>

childrenの型にReactNodeを使う

Reactには一般的に2種類の小要素の型があります。

  • ReactElement: <Component />のような関数をjsxで呼び出せる型
  • ReactNode: ReactElementの特徴に加えて、文字列、数値、nullなどの、jsxであり得るすべての型

上記を考慮して、コンポーネントのchildrenにしてする型はReactNodeを使用することが多いです。

function Heading(props: { children: ReactNode }) {
  return <h1 className="text-2xl font-bold">{props.children}</h1>
}

<Heading>Hello</Heading>

子要素にpropsを渡すときは、React.ComponentPropsを使用する

buttonやinputのような、渡すpropsの型がすでに決まっているものに対してはReact.ComponentPropsを使います。

下記のように<>の部分にタグの名前を記載すると、そのpropsの型を全て返すようになります。

function Button(props: React.ComponentProps<"button">) {
  return <button {...props} />
}

また、上記はtypeof演算子を使ったものでも機能します。

function PrimaryButton(props: React.ComponentProps<typeof Button>) {
  return <Button variant="primary" {...props} />
}

ただ、buttonのpropsにはあるけど、カスタムで作ったコンポーネントに渡したくないpropsがある場合は、下記のようにComponentPropsはあえて使わないパターンもあります。

function Button({
  variant,
  ...props
}: {
  variant: "primary"
  // these aren't being used explicitly
  // they've probably been added one by one as a developer needs them
  type: string
  className: string
}) {
  return (
    <button className={variant === "primary" ? "bg-blue-500" : ""} {...props} />
  )
}

interaction(型結合)

下記のように2つの型を結合したい場合は、型結合(&)を使います。

function Button({
  variant,
  className,
  ...props
}: { variant: "primary" | "secondary" } & React.ComponentProps<"button">) {
  return (
    <button
      {...props}
      className={cn(
        "bg-blue-500",
        variant === "secondary" && "bg-gray-500",
        className,
      )}
    />
  )
}

型から使いたくない要素を省いて使いたい場合はOmitを使用

下記コードのように、buttonのprops要素であるclassNameをカスタムコンポーネントのpropsとして使いたくない場合は、Omitを使います。

buttonのpropsの中でclassName以外を取り出して定義するということができます。

function Button({
  variant,
  className,
  ...props
}: { variant: "primary" | "secondary" } & Omit<
  React.ComponentProps<"button">,
  "className"
>) {
  return (
    <button
      {...props}
      className={cn("bg-blue-500", variant === "secondary" && "bg-gray-500")}
    />
  )
}

まとめ

以上がReactでよく使われるTypeScriptの基礎です。

他にも使われるものはありますが、まずは上記の内容を理解していれば、現場のコードも理解できるかと。

また現場のコードをスラスラ理解できるようになるコツをこちらでまとめているので、ご覧になってみてください。

PS.

エンジニアの単価や市場価値を上げるメルマガをやってます。

メルマガを通して単価を上げた方も多数いて、短期間でかなり成長するコンテンツになってます。

メルマガ登録についてはこちら

成功者のインタビュー動画はこちら

ーーーーーーーーーーーーーーーーーーーー

僕は月商にして120万円を稼いでいますが、

エンジニアで月100万以上稼いでいるというと、

怪しいですよね。

お前は元々仕事できた、才能やセンスがあったんだろ?ともよく言われます。

ですが僕は最初からプログラミングが得意だったわけでもなければ、

仕事が得意だったわけでも

交渉や戦略も得意だったわけではありません。

 

そんな僕でも自信を得ることができて

エンジニアとして月100万以上頂ける程

実力をつけることができました。

経済的にも精神的にも豊かになってます。

結局正しい方向で努力するだけなんですよね。

 

誰だって稼げますし。

正しい方向で学べば誰でも自信を持って

エンジニアとして稼ぐことができる

僕雄貴がポンコツエンジニアから、月120万を稼げるようになった過程を下記の記事では公開しています。

>未経験から月商120万になれた雄貴の行動理念

 

ーーーーーーーーーーーーーーーーーーーー


【下記画像をクリックして、エンジニアのロードマップをGET!!】

 

>>詳細が気になる方はこちらをクリック<<

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

雄貴のアバター 雄貴 フリーランスエンジニア

【エンジニアの単価が上がる情報を発信中】
27歳未経験からIT業界へ→経験2年半で月商80万達成
React案件で初回契約月105万を実現

コメント

コメントする

目次