You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Kotlin生成含AppComponent.annotations的Angular JavaScript代码?

用Kotlin生成目标Angular JS代码的正确写法

我懂你现在的困扰——想把那段有效的Angular JS代码用Kotlin复现出来,之前尝试伴生对象没成功对吧?先明确你要生成的目标JS代码:

const AppComponent = function () { this.title = 'Angular Hello World Demo' };
AppComponent.annotations = [new ng.core.Component({ selector: 'hello-app', templateUrl: './app/app.component.html', styleUrls: ['./app/app.component.css'] })];

这段JS核心是两个部分:带属性初始化的构造函数,以及构造函数本身的静态annotations数组属性。要让Kotlin编译出完全匹配的代码,得用init块处理构造内赋值,再配合@JsStatic注解把伴生对象属性转为类的静态属性。

直接上正确的Kotlin代码:

import kotlin.js.JsStatic

class AppComponent {
    // 定义对应JS中this.title的属性
    var title: String = ""

    // init块会被编译到构造函数内部,完成属性初始化
    init {
        title = "Angular Hello World Demo"
    }

    companion object {
        // @JsStatic注解让该属性编译为AppComponent构造函数的静态属性
        @JsStatic
        val annotations = arrayOf(
            ng.core.Component(
                selector = "hello-app",
                templateUrl = "./app/app.component.html",
                styleUrls = arrayOf("./app/app.component.css")
            )
        )
    }
}

关键细节说明:

  • init块:Kotlin的init代码块会嵌入类的构造函数中,完美对应JS构造函数里this.title的赋值逻辑。
  • @JsStatic:这个注解是核心,它会把伴生对象里的annotations属性编译成AppComponent类的静态属性,完全匹配目标JS里AppComponent.annotations的结构。
  • 数组处理:JS里的styleUrls是数组,所以Kotlin要用arrayOf生成对应的JS数组结构。

这样编译出来的JS代码就和你给出的目标代码结构完全一致了。

内容的提问来源于stack exchange,提问作者Freewind

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:15:21