gpt4 book ai didi

javascript - 如何验证 JavaScript 对象中的方法是否遵循特定接口(interface)?

转载 作者:行者123 更新时间:2023-11-30 09:23:59 25 4
gpt4 key购买 nike

我对 JS 比较陌生,我遇到过这种情况,我需要确定 JS 对象中定义的方法是否遵循特定接口(interface)。

让我借助一个例子来解释:

let logger1 = {
log: function(message, meta){
//logging functionality
}
};

let logger2 = {
log: function(level, message, meta){
//logging functionality
}
}

有 2 个记录器对象(logger1 或 logger2),它们具有自己的记录功能。它们可以从客户端传递到客户端使用的库。
库期望日志方法是特定接口(interface)的,库文档中已经提到了这一点。在库中,我们如何验证传入的记录器对象是否具有与库期望的接口(interface)匹配的“log”方法?

let Library = function(logger){
//Here I can verify if the 'log' function is defined. But how do i make sure the log
//function matches the interface that the library is expecting ?
//Let's say the interface that the library is expecting is function(level,message,meta),
//which is satisfied only by logger2.
if(logger && typeof(logger.log) === 'function'){
this.logger = logger;
}
else{
this.logger = console;
}
}

let lib1 = new Library(logger1);
let lib2 = new Library(logger2);

最佳答案

你真的不能。 Javascript 函数可以省略它不使用的参数,因此该函数可能具有更少 参数并且仍然兼容。该函数可以定义更多 参数,如果未传递这些参数将变为未定义,因此仍然兼容。它可能在内部使用 arguments因此不定义任何参数,并且仍然兼容。它可以按照自己的意愿命名任何参数,并且仍然兼容,因此即使检查参数名称也无济于事。

你唯一能做的就是使用类似 Typescript 的东西并添加编译时检查。

关于javascript - 如何验证 JavaScript 对象中的方法是否遵循特定接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49915383/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com