swiftwasm / swiftwasm/JavaScriptKit

[BridgeJS] Support union types

Offen
#663 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Vorherrschende Sprache
Swift
Sterne
986
Forks
76
Ø Merge
21 Std. 11 Min.
Gemergte PRs (30 T.)
4

Beschreibung

Union types (other than rawvalue which are already done) should be supported. The best way to do this is unclear to me so this issue functions as a discussion point.

Example:

export type Foo = { foo: string } 
export type Bar = { bar: string }
export type Example = Foo | Bar
export function example(): Example

Could maybe generate:

@JSClass struct Foo {
    @JSGetter var foo: String
    @JSSetter func setFoo(_ value: String) throws(JSException)
}
@JSClass struct Bar {
    @JSGetter var bar: String
    @JSSetter func setBar(_ value: String) throws(JSException)
}
@JSClass enum Example {
    case foo(Foo)
    case bar(Bar)
}
@JSFunction func example() throws(JSException) -> Example

Note that ts unions can change dynamically eg if I set foo to null and bar to a string, the type changes from Foo to Bar, so idk if that works with an enum like this in Swift.

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Es wird keine Datei oder kein Test genannt. Beginne damit, die im Issue referenzierte bestehende rawvalue-Unterstützung zu finden, und prüfe, wie die gezeigten TypeScript-Unions auf Swift abgebildet werden; kläre, wie Änderungen zur Laufzeit zwischen Varianten dargestellt werden sollten. Erledigt ist die Aufgabe, wenn die Example-Union und die example()-Signatur korrekt zusammenspielen, einschließlich dynamischer Änderungen zwischen Foo und Bar.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
javascript, swift, typescript
Bereich
api
Issue-Typ
Feature
Schwierigkeit
5/5
Geschätzter Aufwand
Über eine Woche
Aktivitätsstatus
Ruhig
Klarheit
Muss geklärt werden
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.