Kotlin JS:如何通过index.d.ts生成Express包装器?
借助Express的index.d.ts生成Kotlin JS包装器的可行方案
完全可以通过Express的TypeScript类型定义文件(index.d.ts)生成对应的Kotlin JS包装器,Kotlin官方提供了工具支持这类转换,具体步骤如下:
1. 获取Express的TypeScript类型定义
首先确保你安装了@types/express包(Express核心包本身不带类型定义),可以通过npm安装:
npm install @types/express --save-dev
安装完成后,类型定义文件会位于node_modules/@types/express/index.d.ts。
2. 使用ts2kt转换类型定义
ts2kt是Kotlin官方提供的命令行工具,专门用于将TypeScript .d.ts 文件转换为Kotlin外部声明(即你需要的包装器)。
运行以下命令完成转换:
ts2kt -d ./kotlin-express-decls ./node_modules/@types/express/index.d.ts
-d ./kotlin-express-decls指定转换后的Kotlin文件输出目录- 最后一个参数是目标
.d.ts文件的路径
3. 将生成的包装器引入项目
转换完成后,kotlin-express-decls目录下会生成一系列.kt格式的外部声明文件,将这些文件复制到你的Kotlin JS项目的src/main/kotlin目录下,或者作为单独的模块依赖引入。
4. 手动调整(必要时)
ts2kt的转换并非100%完美,遇到复杂的TypeScript语法(比如高级泛型、条件类型、扩展接口)时,可能会生成存在语法错误的Kotlin代码。此时需要你手动修正这些错误,比如调整泛型约束、修正函数签名等。
示例:在Kotlin JS中使用生成的包装器
转换并调整完成后,你就可以像使用原生Express一样在Kotlin代码中编写逻辑:
import express.* fun main() { val app = express() val port = 3000 app.get("/") { req, res -> res.send("Hello from Kotlin JS + Express!") } app.listen(port) { println("Server listening on http://localhost:$port") } }
Gradle自动化配置(可选)
如果使用Gradle构建项目,可以添加自定义任务自动执行转换:
plugins { kotlin("js") version "1.9.20" } kotlin { js { nodejs() binaries.executable() } sourceSets.main { dependencies { implementation(npm("express", "4.18.2")) implementation(npm("@types/express", "4.17.21")) } } } tasks.register("generateExpressDeclarations") { doLast { exec { commandLine("npx", "ts2kt", "-d", "src/main/kotlin/express", "node_modules/@types/express/index.d.ts") } } }
运行./gradlew generateExpressDeclarations即可自动生成并更新包装器。
内容的提问来源于stack exchange,提问作者László Stahorszki
相关产品推荐
相关产品推荐

