TypeScript の型は PropType から推測できますか?
P粉715304239
2023-08-14 17:59:21
<p>この場合、型を推測する方法はわかっています: </p>
<pre class="brush:php;toolbar:false;">PropTypes を 'prop-types' からインポートします。
const props = {
id: PropTypes.number、
};
type Props = PropTypes.InferProps;
const x: 小道具 = {};
x.id; // 数値 | null | 未定義</pre>
<p>ただし、私の場合は次のとおりです。</p>
<pre class="brush:php;toolbar:false;">const propsShape = PropTypes.shape({
id: PropTypes.number、
// ネストされた PropTypes.shape 呼び出しを含むその他のプロパティ
});</pre>
<p>試してみると:</p>
<pre class="brush:php;toolbar:false;">type PropsFromShape = PropTypes.InferProps<typeof propsShape>;
const y: PropsFromShape = {};
const z = y.id;
<p>コンパイルに失敗しました: </p>
<pre class="brush:php;toolbar:false;">タイプ '{}' をタイプ 'PropsFromShape' に割り当てることはできません。
プロパティ 'isRequired' はタイプ '{}' にはありませんが、タイプ 'InferPropsInner<Pick<Requireable<InferProps<{ id: Requireable<number>; }>>, "isRequired">>' には必要です。
プロパティ 'id' はタイプ 'PropsFromShape' に存在しません。</pre>
<p><code>shape</code> のパラメータを別の定数に抽出して上記のように行うことはできますが、<code>propsShape</code> からプロパティの型を直接推論する方法はありますか?良い方法でしょうか? </p>
ネストされたオブジェクトのタイプを取得するには、
を使用できます。 リーリーtype NestedProps = PropTypes.InferProps<typeof propsShape>['isRequired'];
または、props 定義全体を 1 か所に配置できる場合:
リーリー個人的には後者の方が読みやすいと思います。