問題タブ [kotlin-js-interop]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
kotlin - KotlinでプロパティのバッキングフィールドのJsNameを設定するにはどうすればよいですか?
1.0.x でサポートされていない Kotlin の JavaScript バックエンドをいじり、現在、おもちゃのプロジェクトを 1.1.x に移行しようとしています。これは、PouchDB とやり取りする単一ページの Web アプリの骨組みです。PouchDB にデータを追加するには、特定のプロパティ_id
とを持つ JavaScript オブジェクトが必要_rev
です。また、PouchDB によって予約されているため、他のプロパティを最初から持つ必要はありません。_
このようなクラスを作成すると、インスタンスを PouchDB に送信できます。
ただし、プロパティを仮想にするために何かを行うと、インターフェイスをオーバーライドするか、クラスを開いてそれらをオーバーライドするサブクラスを作成すると、_id
フィールド名が次のよう_id_mmz446$_0
にマングルされ、PouchDB はオブジェクトを拒否します。プロパティに適用@JsName("_id")
すると、生成された getter と setter にのみ影響します。バッキング フィールドの名前はまだ変更されたままです。
また、名前が で始まらない仮想プロパティの場合_
、PouchDB はオブジェクトを受け入れますが、適切な名前のプロパティではなく、マングルされた名前のバッキング フィールドのみを格納します。
今のところ、仮想ではないものにすることで回避できると思います。しかし、Kotlin で PouchDoc と非 PouchDoc クラスの間でインターフェイスを共有することを考えていましたが、それができないようです。
これを機能させる方法、または Kotlin 言語の変更が必要ですか?
javascript - Kotlin for Javascript でクラスに静的プロパティを設定する方法
Kotlin のクラスで静的プロパティを定義する必要があり、Javascript にコンパイルすると、そのクラスの真の静的フィールドになります。この状況では、コンパニオン オブジェクトは機能しません。
たとえば、以下のような抽象クラスとその実装クラスがあるとします。
これがコンパイルされる Javascript は次のとおりです。
しかし、コンパイルするために必要なのは次のとおりです。
の新しいインスタンスを作成しなくても、id
フィールドが実際に静的に存在するようにします。MyClass
MyClass
コンパニオン オブジェクトを使用してみましたが、別のオブジェクト/関数が呼び出されて作成されMyClass$Companion
、id
フィールドがそれに割り当てられ、実際に静的に割り当てられることはありませんMyClass
。
Kotlin でこのような真の静的フィールドを設定するにはどうすればよいですか?