swiftwasm / swiftwasm/JavaScriptKit
[BridgeJS] Support union types
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
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Ö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