DEV Community

kaede
kaede

Posted on • Edited on

TypeScript 配列とオブジェクトの継承

関数で複雑な型を参照する時にハマったのでまとめておく


オブジェクトの配列を関数に継承する

type InputProp = {
  label: string;
  value: string;
};
Enter fullscreen mode Exit fullscreen mode

この型があり

const forms: InputProp = [
    { label: "id", value: "0001" },
    { label: "name", value: "Tak" },
]
Enter fullscreen mode Exit fullscreen mode
<FormTable rows={forms} />
Enter fullscreen mode Exit fullscreen mode

このように受け渡すと失敗する
rows がないと言われる。

export type middleProp = {
  rows: InputProp[];
};
Enter fullscreen mode Exit fullscreen mode

そのため、InputProp を使うためのミドルウェアとして
このような中にはさむ型の middleProp が必要になる。

https://yutaro-blog.net/2022/03/21/react-search/

この yutaro さんの記事でも

type member = {
  name: string;
  country: string;
  food: string;
};

type MemberList = Array<member>;
Enter fullscreen mode Exit fullscreen mode

member というオブジェクトの型
それを元にした memberList というオブジェクト配列の型を作成して

  const [memberList, setMemberList] = useState<MemberList>(allMemberList);
Enter fullscreen mode Exit fullscreen mode

allMeberList という実際のデータから state を作るときの型に利用している。


オブジェクトのオブジェクトのタイプを使う

export type ObjectProp = {
  title: string;
  subTitle?: string;
};
Enter fullscreen mode Exit fullscreen mode

オブジェクトの型を定義して

export type MiddleProp = {
  forms: CpFormObjectProp;
};
Enter fullscreen mode Exit fullscreen mode

引き渡し用のミドルウェア的な型を定義

const formObject: MiddleProp["forms"] = {
  title: "BB";
  subTitle?: "Toy Gun Ammo";
};
Enter fullscreen mode Exit fullscreen mode

ミドルウェアから form のプロパティに入っている
オブジェクトの型を呼び出し、オブジェクトの中身を入れる

<FormTable {...formObject} />
Enter fullscreen mode Exit fullscreen mode

これは forms では渡せないため、スプレッドで渡す。

Top comments (0)