Reactjs - تايبسكريبت و React: فشل استنتاج النوع عند استخدام React.Component و props ذات النوع الشرطي
في الإعداد أدناه، أحاول الحصول على النوع الصحيح المستنتج لمعلمة القيمة في دالة onChange. الإعداد أدناه يعطيني قيمة من النوع string | number رغم أنني كنت أظن أنه يجب أن يكون string نظرًا لأن القيمة تم تعيينها على string.
import * as React from 'react'
type NumberProps = {
decimals: number;
};
type StringProps = {};
type Props<T> = {
value: T;
onChange: (value: T) => void;
} & (T extends number ? NumberProps : StringProps);
class Y<T extends string | number> extends React.Component<Props<T>> {}
new Y({ value: 2.5, onChange:((value) => { /* value is inferred as string | number, but should be number */ })})
شيئان سيجعلان الاستنتاج صحيحًا - ولكنه بالطبع سيكون غير صحيح بطرق أخرى - ولكنه قد يعطي فكرة عما هو خطأ:
يمكنني إزالة هذا الجزء من نوع Props:
& (T extends number ? NumberProps : StringProps);يمكنني جعل
Yيرث من شيء آخر غير React.Component، على سبيل المثال فصل مثلclass X<T> { constructor(props: T) {} }.
هل أفعل/أتوقع شيئًا خاطئًا، أم أن هذه مشكلة في تايب سكريبت و/أو أنواع React؟
الإجابة رقم 1
إذا لم تنجح استنتاج النوع، يمكنك تحديد قيمة معامل النوع بنفسك صراحة:
new Y<string>({ value: 'test', onChange:((value) => { /* value is now a string */ })})
