Bolehkah jenis dalam TypeScript disimpulkan daripada PropTypes?
P粉715304239
2023-08-14 17:59:21
<p>Saya tahu cara membuat kesimpulan jenis dalam kes ini: </p>
<pre class="brush:php;toolbar:false;">import PropTypes daripada 'prop-types';
alat peraga = {
id: PropTypes.number,
};
jenis Props = PropTypes.InferProps<jenis props>;
const x: Props = {};
x.id; // nombor |.
<p>Walau bagaimanapun, dalam kes saya, saya mempunyai:</p>
<pre class="brush:php;toolbar:false;">const propsShape = PropTypes.shape({
id: PropTypes.number,
// Lebih banyak sifat termasuk panggilan PropTypes.shape bersarang
});</pre>
<p>Jika saya mencuba: </p>
<pre class="brush:php;toolbar:false;">type PropsFromShape = PropTypes.InferProps<typeof propsShape>;
const y: PropsFromShape = {};
const z = y.id;</pre>
<p>Ia gagal untuk disusun: </p>
<pre class="brush:php;toolbar:false;">Taip '{}' tidak boleh diperuntukkan untuk menaip 'PropsFromShape'.
Harta 'isRequired' tiada dalam jenis '{}' tetapi diperlukan dalam jenis 'InferPropsInner<Pick<Requireable<InferProps<{ id: Requireable<number>;, "isRequired">>'.
'id' harta tidak wujud pada jenis 'PropsFromShape'.</pre>
<p>Saya boleh mengekstrak parameter <code>shape</code> ke dalam pemalar yang berasingan dan lakukannya seperti di atas, tetapi adakah terdapat cara untuk membuat kesimpulan terus jenis sifat daripada <code>propsShape</code> Cara yang baik? </p>
Untuk dapatkan jenis objek bersarang boleh gunakan
type NestedProps = PropTypes.InferProps<typeof propsShape>['isRequired'];
Atau jika anda boleh meletakkan keseluruhan definisi prop di satu tempat:
Saya secara peribadi berpendapat yang kedua lebih mudah dibaca.