-
Notifications
You must be signed in to change notification settings - Fork 40
Open
Description
So far we (I) have been recommending interfaces to write bindings, but in recent discussions we are considering the possibility of using classes instead. Some links:
fsharp/fslang-suggestions#1054
fable-compiler/Fable#2353
fable-compiler/Fable#2492
So I'm toying now with the idea of writing a script to automatically convert some of the bindings in this repo to classes to see how far we can go, and if the ergonomics is good enough to start recommending writing classes instead of interfaces (and whether we should change ts2fable).
Merits:
- We could use normal constructors (we would still leave the static
Createmethod to avoid breaking changes) - We could do type testing
Demerits:
- Namespaces could be a breaking change. We currently have
Browser.TypesandBrowserfor the values exposing the changes. But in many cases we wouldn't need - Multiple inheritance: many interfaces inherit from more than one interface. Given that JS doesn't allow multiple inheritance either, my hope is that those cases always correspond to actual interfaces. But this mean we will have to review manually multiple cases to see if they can become a class or not.
- Virtual methods: I think there's no need to inherit and override a method of any type in this repo (mainly because it's not possible right now and we didn't have complaints, although writing raw web components do require this) but if it does become necessary we need to identify the methods and use the verbose F# syntax for virtual declaration (abstract signature plus default declaration with dummy implementation).
Thoughts? cc @MangelMaxime @Zaid-Ajaj @inosik @Booksbaum
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels