Ответ 1
Вы можете использовать JSDoc, чтобы код Visual Studio правильно выводил реквизиты компонентов React, хитрость заключается в использовании @extends {Component<{type def for props}, {type def for state}>}}
:
file: store.js (это просто пример файла, демонстрирующий, как intellinsense будет перехватывать определения, но подойдет любой объект, класс, typedefiniton и, возможно, даже json. Если вы можете импортировать и отразить его, вы можете связать его с Компонент реквизит)
class CustomClass {
// ...
}
// Note: exporting an object would also do
export default class UiStore {
/**
* @type {string} this is a string
*/
str = null
/**
* @type {number} this is a number
*/
num = null
/**
* @type {Date} this is a Date
*/
dat = Date
/**
* @type {CustomClass} this is a CustomClass
*/
cls = null
}
файл: test.jsx
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import UiStore from './store';
/**
* @typedef Props
* @prop {UiStore} uiStore
*/
/**
* @extends {Component<Props, {}>}}
*/
export default class DeviceMirror extends Component {
static propTypes = {
// not needed for intellisense but prop validation does not hurt
uiStore: PropTypes.instanceOf(UiStore),
}
/**
* @param {Props} props - needed only when you don't write this.props....
*/
constructor(props) {
super(props);
this.s = props.uiStore.str;
}
render() {
const { uiStore } = this.props;
return <p>{uiStore.str}</p>;
}
}
VSCode может использовать такого рода объявления и будет предлагать intellisense и завершение кода. как внутри, так и снаружи файла компонента: