npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@rideyego/types-react-component

v1.1.1

Published

Typescript definitions for React components

Downloads

15

Readme

React Component

Typescript definitions for React components

Installation

npm i @rideyego/types-react-component
yarn add @rideyego/types-react-component

Description

Give typescript definitions for the React components more flexible than the original one.

Why to use this package

If you are using React and typescirpt you probably had some trouble with component props and default props. With the original type, each of your optional props should always be undefined but it's false when you give there a default value.

With the original component type given by react, you can't specify what type of children you need on your component. This can make some bugs due to a bad usage of a component children.

With the CustomFunctionComponent type, all of that can be explicitly specified.

How to use it

Instead of using types React.FC<PropsType> or React.VFC<PropsType> use a CustomFuctionComponent<PropsType> to define the type of you component

Example

// MyComponent.tsx

import { 
  CustomFunctionComponent,
  Internal,
  External,
  ChildrenType,
} from '@enchiladas/react-components';

interface MyComponentProps {
  myRequiredProps: any;
  myOptionalProps?: any;
  myOptionalPropsWithDefaultValue?: any;
}

interface MyComponentRef {
  something: any;
}

const defaultProps = {
  myOptionalPropsWithDefaultValue = 'default';
}

type MyComponentType = CustomFunctionComponent<
  MyComponentProps,
  keyof typeof defaultProps,
  MyComponentRef,
  ChildrenType.ALL
>;

const MyComponent: Internal<MyComponentType> = React.forwardRef((props, ref) => {
  props.myRequiredProps; // Of type any
  props.myOptionalProps; // Of type any | undefined
  props.myOptionalPropsWithDefualtValue; // Of type any

  return (
    <div>
      Hello world!
    </div>
  );
});

export default MyComponent as External<MyComponentProps>
<!-- Usage example -->
<div>
  <MyComponent
    ref={MyComponentRef}
    myRequiredProps="hello"
  />
  <MyComponent
    ref={MyComponentRef}
    myRequiredProps="world"
    myOptionalProps="Foo"
    myOptionalPropsWithDefaultValue="Bar"
  />
</div>

Definition

CustomFunctionComponent Accept 1 to 4 template arguments

PropsType: Interface representing all of the component props. (required)

DefaultKeys: String type representing all the props with a default value. (default: undefined)

Ref: Interface representing the reference object accessible on the component. (default: undefined)

ChildrenType: Value of ChildrenType representing the type of children given to the component. (default: ChildrenType.NONE)

Internal VS External

The component must define two type to be interpreted correctly by the Typescript engine.

The internal version of the type obtained using Internal<CustomFunctionComponent<MyPropsType, ...>> put the optional props with default value as required. This must be use to type the component when it declared.

The external version of the type obtained using External<CustomFunctionComponent<MyPropsType, ...>> let the Props interface as the same as you defined it. This type must be use to type the component when it export from his module.