Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 实例化期望;新";KotlinJS上的关键字_Javascript_Kotlin_Kotlin Js_Kotlin Js Interop - Fatal编程技术网

Javascript 实例化期望;新";KotlinJS上的关键字

Javascript 实例化期望;新";KotlinJS上的关键字,javascript,kotlin,kotlin-js,kotlin-js-interop,Javascript,Kotlin,Kotlin Js,Kotlin Js Interop,考虑到以下javascript代码(部分取自Apollo Server文档),它将创建Apollo Server实例并启动它 const{ApolloServer}=require('apollo-server') const server=新服务器({…}); server.listen().then({url})=>{ log(`Server ready at${url}`); }); 现在考虑用KoTLIJS复制相同的行为。 首先,Kotlin没有“new”关键字,按预期调用Apoll

考虑到以下javascript代码(部分取自Apollo Server文档),它将创建Apollo Server实例并启动它


const{ApolloServer}=require('apollo-server')
const server=新服务器({…});
server.listen().then({url})=>{
log(`Server ready at${url}`);
});
现在考虑用KoTLIJS复制相同的行为。 首先,Kotlin没有“new”关键字,按预期调用
ApolloServer()
,将不起作用,但会引发错误(TypeError:Class构造函数ApolloServer不能在没有“new”的情况下调用)

//我们可以平淡无奇地表示上面代码的一部分,如:
外部乐趣需求(模块:字符串):动态
val ApolloServer=require(“阿波罗服务器”)。阿波罗服务器
//ApolloServer是一个js类
声明外部类,如:

外部开放类服务器(){
开放式趣味聆听(vararg选项:任意):承诺
运算符fun invoke():任意
}
并将其设置为Apollo服务器类型没有帮助


如何复制“new ApolloServer()”调用?

为了解决这个问题,我发现了一种基于JsModule注释的有趣方法。我们需要创建一个Kotlin文件来表示我们想要导入的javascript模块,在我的例子中是“apollo服务器”

@文件:JsModule(“阿波罗服务器”)
@文件:JsNonModule
package.com.package
导入kotlin.js.Promise
外部接口服务器信息{
变量地址:字符串
变量族:字符串
var url:String
var subscriptionurl:String
变量端口:动态/*数字|字符串*/
get()=外部定义
设置(值)=外部定义
变量subscriptionPath:字符串
var服务器:任何
}
外部开放类ApolloServer(配置:Any?/*ApolloServerExpressConfig&`T$0`*/):Any{
打开var httpServer:任何
开放式var cors:任何
打开var onHealthCheck:任何
打开var createServerInfo:Any
打开有趣的applyMiddleware()
开放式趣味聆听(vararg选项:任意):承诺
打开有趣的停止():承诺
}
通过上面的代码,我们基本上描述了我们期望在apollo服务器模块中找到的内容,以及如何将其映射到Kotlin中

在Kotlin主函数中,我们不必指定任何require(…),只需使用ApolloServer类,如:

阿波罗服务器(空)。侦听()。然后{ 控制台日志(it) } 使用这种方法,Kotlin将使用javascript中的new关键字正确地传输它

传输版本摘录:

函数main$lambda(it){
console.log(it);
返回单元;
}
函数main(){
(新的ApolloServer(null)).listen().then(main$lambda);
}

此代码只是一个示例,如果没有正确的配置,ApolloServer将无法初始化,例如,此示例包含一个可为空的配置。

很抱歉,我不知道Kotlin,但如果它有JS interop,则必须有一种惯用的方法来调用
new
。一个创可贴修复可以实现<代码>函数CREATESEVER(…){返回新的AppLoServer(…)} /代码>我不知道K/JS,但是您可能需要在没有新关键字的情况下调用它,它将实例化一个新的实例。因为Kotlin中没有
new
关键字(至少是我们在Kotlin/JVM中所做的),谢谢:我可能会制作其他包含工厂(如createServer)的js文件,然后导入它们。这与我最初认为的结论相同,但必须有一种方法来避免这种做法。AnimeshSahu:我也在JVM中使用Kotlin,并开始在node.js中使用它。它非常强大,但缺少文档。很多时候,我不得不分析javascript输出,以了解它是如何工作的,因为没有太多的解释。我找到的唯一解决方案是下面的一个,但它没有像预期的那样工作:我将尝试做一些实验,并分享解决方案。