考虑以下 javascript 代码(部分取自 Apollo Server 文档),它创建了一个 ApolloServer 实例并启动它。
const {ApolloServer} = require('apollo-server')
const server = new ApolloServer({ ... });
server.listen().then(({ url }) => {
console.log(`Server ready at ${url}`);
});
现在考虑使用 KotlinJS 复制相同的行为。首先,Kotlin 没有“new”关键字,并且ApolloServer()
按预期调用,不会工作但会引发错误(TypeError: Class constructor ApolloServer cannot be invoked without 'new')。
// We can banally represent part of the code above like:
external fun require(module: String): dynamic
val ApolloServer = require("apollo-server").ApolloServer
// ApolloServer is a js class
声明一个外部类,如:
external open class ApolloServer() {
open fun listen(vararg opts: Any): Promise<Any>
operator fun invoke(): Any
}
并将其设置为 ApolloServer 类型没有帮助。
我们如何复制“new ApolloServer()”调用?