rodal icon indicating copy to clipboard operation
rodal copied to clipboard

Typescript support

Open saurabhnemade opened this issue 5 years ago • 8 comments

Can we have types for this? It would be nice to have for folks with typescript boilerplate.

saurabhnemade avatar Dec 30 '19 22:12 saurabhnemade

I don't know if it helps but I made one for my project and it works for me.

declare module 'rodal' {
  import {MouseEventHandler, ReactNode} from 'react';

  type RodalProps = {
    children?: ReactNode;
    width?: number;
    height?: number;
    measure?: string;
    visible?: boolean;
    showMask?: boolean;
    closeOnEsc?: boolean;
    closeMaskOnClick?: boolean;
    showCloseButton?: boolean;
    animation?: string;
    enterAnimation?: string;
    leaveAnimation?: string;
    duration?: number;
    className?: string;
    customStyles?: {[key: string]: any};
    customMaskStyles?: {[key: string]: any};
    onClose?: MouseEventHandler<HTMLSpanElement>;
    onAnimationEnd?: () => never;
  };

  const Rodal = (_: RodalProps): JSX.Element => {};
  export = Rodal;
}

giwiro avatar Apr 03 '21 21:04 giwiro

How do you make use of this? where do you save it?

dansmog avatar Nov 23 '21 07:11 dansmog

How do you make use of this? where do you save it?

In order to use custom types you will need to import it through typescript. To do so, add the path to your custom types into the tsconfig.json. For example if I got the following folder structure (included the custom-types folder):

project/
├── src/
├── custom-types/
    ├── rodal/
    │     └── index.d.ts.        <-- this is where the "decla module 'rodal'" file should be saved
    └── some-other-module/
          └── index.d.ts

In order to add the folder into typescript is adding it to the include key.

{
  "compilerOptions": {
    "target": "es5",
    "lib": [
      "dom",
      "dom.iterable",
      "esnext"
    ],
    "allowJs": true,
    "skipLibCheck": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "strict": true,
    "forceConsistentCasingInFileNames": true,
    "noFallthroughCasesInSwitch": true,
    "module": "esnext",
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": true,
    "jsx": "react-jsx"
  },
  "include": [
    "src",
    "custom-types/**/*"
  ]
}

giwiro avatar Mar 02 '22 08:03 giwiro

Make a PR for this :) it helped me out a lot. Although my linter did not like the return type (so I just ignored it for that line)

JackMcBride98 avatar Sep 06 '22 10:09 JackMcBride98

declare module 'rodal' {
  import {MouseEventHandler, ReactNode} from 'react';

  type RodalProps = {
    children?: ReactNode;
    width?: number;
    height?: number;
    measure?: string;
    visible?: boolean;
    showMask?: boolean;
    closeOnEsc?: boolean;
    closeMaskOnClick?: boolean;
    showCloseButton?: boolean;
    animation?: string;
    enterAnimation?: string;
    leaveAnimation?: string;
    duration?: number;
    className?: string;
    customStyles?: {[key: string]: any};
    customMaskStyles?: {[key: string]: any};
    onClose?: MouseEventHandler<HTMLSpanElement>;
    onAnimationEnd?: () => never;
  };

  const Rodal = (_: RodalProps): JSX.Element => {};
  export = Rodal;
}

thanks a lot

Verrok avatar Dec 17 '22 16:12 Verrok

Now that I'm using nextjs I changed it a little bit:

declare module 'rodal' {
  import {MouseEventHandler, JSX, PropsWithChildren} from 'react';

  type RodalProps = PropsWithChildren & {
    width?: number;
    height?: number;
    measure?: string;
    visible?: boolean;
    showMask?: boolean;
    closeOnEsc?: boolean;
    closeMaskOnClick?: boolean;
    showCloseButton?: boolean;
    animation?: string;
    enterAnimation?: string;
    leaveAnimation?: string;
    duration?: number;
    className?: string;
    customStyles?: Record<string, any>;
    customMaskStyles?: Record<string, any>;
    onClose?: MouseEventHandler<HTMLSpanElement>;
    onAnimationEnd?: () => never;
  };

  function Rodal(_: RodalProps): JSX.Element;
  export = Rodal;
}

and in the tsconfig.json:

{
  "compilerOptions": {
    "typeRoots": [
      "custom-types",
      "node_modules/@types"
    ],
}

giwiro avatar Jul 15 '23 05:07 giwiro

I sent a PR #72 for this matter.

giwiro avatar Jul 16 '23 22:07 giwiro

I sent a PR https://github.com/chenjiahan/rodal/pull/72 for this matter.

Thanks for you contribution! This change has been released in v2.1.0

chenjiahan avatar Jul 17 '23 00:07 chenjiahan