問題タブ [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.

0 投票する
2 に答える
708 参照

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 言語の変更が必要ですか?

0 投票する
1 に答える
822 参照

javascript - Kotlin for Javascript でクラスに静的プロパティを設定する方法

Kotlin のクラスで静的プロパティを定義する必要があり、Javascript にコンパイルすると、そのクラスの真の静的フィールドになります。この状況では、コンパニオン オブジェクトは機能しません。

たとえば、以下のような抽象クラスとその実装クラスがあるとします。

これがコンパイルされる Javascript は次のとおりです。

しかし、コンパイルするために必要なのは次のとおりです。

の新しいインスタンスを作成しなくても、idフィールドが実際に静的に存在するようにします。MyClassMyClass

コンパニオン オブジェクトを使用してみましたが、別のオブジェクト/関数が呼び出されて作成されMyClass$Companionidフィールドがそれに割り当てられ、実際に静的に割り当てられることはありませんMyClass

Kotlin でこのような真の静的フィールドを設定するにはどうすればよいですか?