Допустим, у меня есть это
interface IProps {
text: string
}
class TextComponent extends PureComponent<IProps> {
render() {
return (
<Text>{this.props.text}</Text>
)
}
}
function mapStateToProps(state: ITextComponentReduxStore) {
return {
text: state.text,
}
}
function dispatchAction(dispatch: (x: any) => any) {
return {
}
}
export default connect(mapStateToProps, dispatchAction)(TextComponent)
Когда я хочу использовать этот компонент, я просто делаю
<TextComponent />
^^^^^^^^^^^^^^^^^ <- Webstorm underlines this
Webstorm (TSLint) жалуется на
TS2741: Property 'text' is missing in type '{}' but required in type 'Readonly<Pick<IProps, "text">>'.
Как я могу предотвратить это?
Реквизит является частью магазина Redux.





вы определяете реквизиты по мере необходимости
interface IProps {
text: string
}
Итак, вам нужно использовать компонент
<TextComponent text = {“...”}/>
или вы определяете его как необязательный
interface IProps {
text?: string
}
так что вы можете использовать его как
<TextComponent/>
если вы хотите передать сложный объект в качестве реквизита
interface IProps {
data?: ProfileData[];
}
и интерфейс ProfileData,
interface ProfileData {
name: string;
age: number;
photos: string[];
}
и вы можете использовать свой компонент
<TextComponent data = {[{name:”John”, age:26, photos:[“url1”,”url2”]}]}/>
или если вы не хотите определять конкретный тип, вы можете просто определить его как any
interface IProps {
data?: any;
}
но это не лучший выбор для машинописного текста.
хм.. что, если у меня есть сложный объект, а не просто
stringв качестве опоры? Разве нет способа сказать tslint, чтобы он просто не рассматривалIProps?