Giter Site home page Giter Site logo

Comments (18)

nmussy avatar nmussy commented on August 19, 2024 2

from reactshadow.

nmussy avatar nmussy commented on August 19, 2024 1

from reactshadow.

nmussy avatar nmussy commented on August 19, 2024 1

Still haven't looked into it more, sorry. I'll open a PR with what I have so far tonight

from reactshadow.

yurist38 avatar yurist38 commented on August 19, 2024 1

I made my try in the end and that's what I ended up with for now:

declare module 'react-shadow' {
  import { ReactNode, ComponentType } from 'react';

  type RenderElement = keyof HTMLElementTagNameMap;

  type Root = {
    [name in RenderElement]: ComponentType;
  }

  const root: Root;

  export default root;
}

If you have any idea what is wrong or how I can improve these typings - please feel free to share!

from reactshadow.

benji6 avatar benji6 commented on August 19, 2024 1

@yurist38 your types were really helpful for me. I think this might be a slight improvement:

declare module "react-shadow" {
  import * as React from "react";

  type RenderElement = keyof HTMLElementTagNameMap;

  type Root = {
    [name in RenderElement]: React.ComponentType<
      React.HTMLAttributes<HTMLElementTagNameMap[name]>
    >;
  };

  const ReactShadowRoot: Root;

  export default ReactShadowRoot;
}

I'm just passing a type argument of React.HTMLAttributes<HTMLElementTagNameMap[name]> to React.ComponentType. It's not quite right though because if the element is a button for instance we should be using React.ButtonHTMLAttributes instead of React.HTMLAttributes, but it did solve a type error I was getting.

from reactshadow.

yurist38 avatar yurist38 commented on August 19, 2024 1

I've opened a PR based on the solution from @benji6 (thanks for that!). Let's see if it's going to be merged...

from reactshadow.

Wildhoney avatar Wildhoney commented on August 19, 2024

I'd rather keep it as standard JS.

Would be awesome to have a definition file though – thanks @nmussy!

from reactshadow.

nmussy avatar nmussy commented on August 19, 2024

No problem, I'll probably make a PR tonight. It should be pretty easy to maintain, but you can @ me in the future if you need me to update it.

from reactshadow.

Wildhoney avatar Wildhoney commented on August 19, 2024

Thank you @nmussy 👍

from reactshadow.

schibrikov avatar schibrikov commented on August 19, 2024

Also wanted to use the package in TS, but ran into definitions absence.
I'm still not sure I need to use it, but if I decide, I can create definitions myself.

Any news on this? @nmussy

from reactshadow.

Wildhoney avatar Wildhoney commented on August 19, 2024

Any luck folks?

from reactshadow.

MalekBouba avatar MalekBouba commented on August 19, 2024

Same issue.. can we help?

from reactshadow.

yurist38 avatar yurist38 commented on August 19, 2024

I'm about to start using it and missing TS definitions too... If you guys have any draft of definitions and have no time to complete, please commit the stuff and let us know. Some of us can contribute to making it done, I'm pretty sure.

from reactshadow.

nmussy avatar nmussy commented on August 19, 2024

from reactshadow.

marijnbent avatar marijnbent commented on August 19, 2024

Same problem here. Any luck fixing it?

from reactshadow.

Wildhoney avatar Wildhoney commented on August 19, 2024

Still no luck guys?

from reactshadow.

Wildhoney avatar Wildhoney commented on August 19, 2024

@yurist38 just a question of how HTMLElementTagNameMap works if you're using custom elements? For example root.myCustomElement that yields a <my-custom-element> node is perfectly fine in react-shadow, whereas HTMLElementTagNameMap seems to be a map of only the standard HTML elements.

Wouldn't that cause issues? Do we need to allow for arbitrary string types, too?

from reactshadow.

yurist38 avatar yurist38 commented on August 19, 2024

@Wildhoney yes, your concern was correct. Just tested it locally, it doesn't work with a custom element. So I think you're right and we have to make it less strict... I'm opening a PR with refactoring to string.

from reactshadow.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.