ウェブサイト検索

reactjs - Reactのプロパティにおけるインデックスシグネチャ


私はTSでReactのpropsの型を正しく記述する方法を探しています。

私のコンポーネントのプロップは次のようなものです:

interface Props {
  prop1: number,
  prop2: string,
}

しかし、私のコンポーネントは classNames も prop として受け取ります(例:_myClassName はクラス my-class-name に変換されます)。

上記の props タイプでは、TS はエラー _myClassName は型 Props に存在しません を出力します。Props を次のように変更しようとしました:

interface Props{
  prop1: number,
  prop2: string,
  [className: string]: any,
}

しかし、その場合 TS は prop1 と prop2 の型をチェックしません。次のコードはエラーを出しません:

<MyComponent prop1="some-string" /> // prop1 must be a number

では、そのような場合を対処する正しい方法はありますか?

回答 #1

解決策を見つけました。同じ問題に直面するすべての人のために:

interface Props {
  prop1: number,
  prop2: string,
}

export const MyComponent = <P extends Props>(props: P): React.ReactElement | null => {
  // code here
};

その結果、私たちは得ます:

<MyComponent prop1="some-string" /> // error, prop1 must be a number

<MyComponent prop1={0} prop2="some-string" _myClassName /> // no error on additional prop, other props type checks