Допустим, вы определите свой компонент следующим образом:машинопись + React: определение defaultProps правильно
interface IProps {
req: string;
defaulted: string;
}
class Comp extends React.Component<IProps, void> {
static defaultProps = {
defaulted: 'test',
};
render() {
const { defaulted } = this.props;
return (
<span>{defaulted.toUpperCase()}</span>
);
}
}
, когда вы хотите использовать его, машинопись хочет defaulted
пропеллер от вас, даже если это определено в defaultProps
:
<Comp req="something" /> // ERROR: TypeScript: prop 'defaulted' is required
Однако, если вы определяете реквизит интерфейс следующим образом:
interface IProps {
req: string;
defaulted?: string; // note the ? here
}
, то вы не можете использовать его в:
render() {
const { defaulted } = this.props; // ERROR: prop 'defaulted' possibly undefined
return (
<span>{defaulted.toUpperCase()}</span>
);
}
Как определить IProps, defaultProps и компонент правильно, так что типы имеют смысл?
EDIT:
Я использую strictNullChecks
флаг.
*„Я их по умолчанию“* ... не так ли? – jonrsharpe
Я уверен, что я делаю: 'статичные defaultProps: IDefaultProps = { Validate() => NULL, DefaultValue: '', };' – Idefixx
Хорошо, позвольте мне перефразировать: они, кажется, не быть дефолте код, который вы показываете в вопросе. Дайте [mcve]. – jonrsharpe