Webstorm не распознает тип реквизита ... реквизит - PullRequest
0 голосов
/ 18 января 2020

Я объявляю функцию, подобную этой:

const StudentVideoContainer = ({ course, video, currentScore, storedScore, goal, match, ...props}) => {

, в которой есть несколько действий, связанных с объектом props, которые я не хочу разрушать. ИМО эта цепочка достаточно длинная как есть. Тем не менее, prop-types, похоже, не хотят распознавать эти функции, пока я этого не делаю. enter image description here

Я объявил свои проптипы так:

StudentVideoContainer.propTypes = {
    course: PropTypes.shape({
        course: PropTypes.shape({}),
        sections: PropTypes.array,
    }),
    video: PropTypes.shape({}),
    currentScore: PropTypes.number,
    storedScore: PropTypes.number,
    goal: PropTypes.number,
    props: PropTypes.shape({
        getStudentSingleCourse: PropTypes.func,
        clearStudentSingleCourse: PropTypes.func,
        getStudentVideo: PropTypes.func,
        clearStudentVideo: PropTypes.func,
    }),
    match: PropTypes.shape({
        params: PropTypes.shape({
            courseId: PropTypes.string,
            videoId: PropTypes.string,
        })
    })
};
StudentVideoContainer.defaultProps = {
    course: PropTypes.shape({}),
    video: PropTypes.shape({}),
    currentScore: PropTypes.number,
    storedScore: PropTypes.number,
    goal: PropTypes.number,
    props: {
        getStudentSingleCourse: PropTypes.func,
        clearStudentSingleCourse: PropTypes.func,
        getStudentVideo: PropTypes.func,
        clearStudentVideo: PropTypes.func,
    },
    match: PropTypes.shape({
        params: PropTypes.shape({
            courseId: PropTypes.string,
            videoId: PropTypes.string,
        })
    })
};

Я попытался поместить все, что я положил для match, в определение props и веб-шторм перестала признавать его действительным, но когда я вытащил его обратно и деструктурировал, веб-буря признала его действительным. Я не получаю никаких ошибок в консоли, которые реквизиты не прошли проверку. И если я заменю любую из функций под props на что-либо, кроме PropTypes.fun c, я получаю сообщение об ошибке, что функция ожидалась, поэтому я уверен, что они действительно проверяются.

Я что-то не так делаю?

Хотя технически это не приводит к каким-либо ошибкам, которые я вижу, эта красная линия сводит меня с ума, и я не фанат комментариев к подавлению следующей строки. Я не знал, что валидация опора была такой, как когда-то, примерно как 2 недели go, поэтому я предполагаю, что просто делаю это неправильно.

1 Ответ

1 голос
/ 18 января 2020

Но с ...props не будет никакого введения нового свойства с именем props, в этом случае это должно работать:

// Instead of this
props: PropTypes.shape({
    getStudentSingleCourse: PropTypes.func,
    clearStudentSingleCourse: PropTypes.func,
    getStudentVideo: PropTypes.func,
    clearStudentVideo: PropTypes.func,
}),
// Use this (same applies for the defaultProps)
getStudentSingleCourse: PropTypes.func,
clearStudentSingleCourse: PropTypes.func,
getStudentVideo: PropTypes.func,
clearStudentVideo: PropTypes.func,

См. this codesandbox для базового c примера (попробуйте изменить «Случайное» на число, и в консоли вы увидите, что проверка реквизита работает)

...