Code Monkey home page Code Monkey logo

Comments (3)

smalluban avatar smalluban commented on May 31, 2024 1

Hi @Hyzual! Thanks for such nice words about the project. I am eager to help if you encounter any other problems.

Fortunately, I am currently using at work hybrids in TypeScript, so I've found many bugs in typings and I fixed them already. You can easily fix your problem by adding an explicit definition of the content property (for the render would be the same), if you use the render factory implicitly. However, you could ask why, as it works well without that?

There are two reasons. The first is the TS limitation itself. It does not support generic values (more here: microsoft/TypeScript#17574), so we are required to create an interface instead of taking it from the hybrids object (we cannot pass the dynamic type itself as an argument of the function within that definition). Ultimately, I would like to have only hybrids definition without an additional interface (as it usually is just redundant).

The second reason is the dynamic behavior of the property definition. You are not forced to use render factory, when defining render or content property. The factory is used only if the property definition is a function (look at the translation rules). Because of that, the Hybrids or TaggedHybrids type cannot assume that your content or render will use that factory for sure, so it is defined in the way, that if you don't use those in other properties, it allows to set them as a function. However, if you need that property in another call, you must set it explicitly.

For the render factory, the interface property should be defined as () => HTMLElement, and adding that field fixes your issue:

interface ComponentWithRef {
  button: HTMLButtonElement | null;
  content: () => HTMLElement;
}

I did some other small fixes (use "as" in querySelector() as it returns Element type instead). You can check out the full example here (your forked example): https://codesandbox.io/s/hybrids-query-content-in-typescript-issue-forked-60gh3?file=/src/index.ts:87-183

EDIT: PS. I now that TS docs are not the best, just one document, so I think I will add extending docs for more TS examples to my todo list :)

from hybrids.

Hyzual avatar Hyzual commented on May 31, 2024 1

Thank you very much for the quick and detailed answer! I'll be sure to take a look at it, probably not before Monday.

from hybrids.

Hyzual avatar Hyzual commented on May 31, 2024 1

Hi, I have finally got some time to test your solution and it did work wonderfully, thank you very much 🙏 !
If you need my help, I could try submitting a pull request for the typescript docs to help document that.

from hybrids.

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.