如何对React PropTypes使用typescript jsdoc注释

lor*_*non 7 javascript jsdoc typescript

使用typescript定义反应组件时,我们可以编写如下内容:

class SomeComponent extends React.Component<PropInterface, StateInterface> {
  // ...
}
Run Code Online (Sandbox Code Playgroud)

有没有办法使用jsdoc注释进行等效,并检查道具类型.

art*_*tin 12

我更喜欢以下表格(es2015 + @ types/react):

/**
 * @typedef {object} Props
 * @prop {string} className
 * @prop {number} numberProp
 *
 * @extends {Component<Props>}
 */
export default class SomeComponent extends Component {
    render() {
        return (
            <div className={this.props.className}>
                {this.props.numberProp}
            </div>
        );
    }

}
Run Code Online (Sandbox Code Playgroud)


dat*_*oml 5

如果有人正在寻找替代解决方案。关于这个Typescript 问题,你也可以这样实现。

import React, { Component } from 'react';
import PropTypes from 'prop-types';

/**
 * @augments {Component<{onSubmit:function, text:string}>}
 * @param {object} event - Input event
 * @return {React.ReactElement} - React component
*/
class Test extends Component {
  handleInput = (event) => {
    event.preventDefault();
    this.props.onSubmit(event.target.value);
  };

  render() {
    const { text } = this.props;
    return <div>Hello, property :O {text}</div>;
  }
}

Test.propTypes = {
  onSubmit: PropTypes.func.isRequired,
  text: PropTypes.string.isRequired,
};

export default Test;
Run Code Online (Sandbox Code Playgroud)