我想让您看看我在kotlinjs中创建的扩展函数(1.3.61版):
inline fun Element.queryHtmlSelectorOrNull(selectors: String): E? {
return this.querySelector(selectors = selectors) as E?
}
inline fun Element.queryHtmlSelector(selectors: String): E {
return this.queryHtmlSelectorOrNull(selectors = selectors)
?: error("couldn't find element by selectors '$selectors'")
}现在让我详细说明一下。我使用的是经典的javascript querySelector。此签名:
fun querySelector(selectors: String): Element?有一些缺点/品质:
HTMLDivElement并且结果实际上为null时,我得到没有附加信息/错误消息的NullPointerException。示例: document.querySelector(".something-non-existent")作为HTMLDivElement //抛出HTMLDivElement?或HTMLDivElement)。我的函数修复了一些问题,但是创建了新的问题:
缺点是这不起作用(需要显式设置类型):
val element = document.queryHtmlSelector(".something")如果没有指定任何一个,但我想不出如何做到这一点,那么我可以将“默认”基类型“默认”为Element。
我想要的东西,几乎可以取代原来的功能,只是增加更强的输入和更好的错误信息的好处。任何关于如何改进这一点的提示都将受到极大的赞赏。
发布于 2020-03-30 14:55:06
“如果没有指定任何元素,那么”默认“基类型到元素就很酷了,但是无法想出实现的方法。”事实上,不可能做到这一点,至少用同样的方法是不可能的。一个选项可以是有一个单独的方法来解决这个问题。document.queryHtmlSelectorRaw?或者等等实际上..。Element.querySelector,这让你回到了你开始时的样子。
我想要的东西,几乎可以取代原来的功能,只是增加了更强的输入和更好的错误信息的好处。任何关于如何改进这一点的提示都将受到极大的赞赏。
考虑到这些要求,我会说,目前的方法几乎和你能得到的一样好。您有更强的类型(但您必须指定它)。如果为null,则有更好的错误消息。
我要考虑的唯一事情是:
reified,我不相信你需要它。queryHtmlSelector很容易与内置的querySelector混淆。我可以推荐一下selector或select这个名字吗?No element found using selector '$selector' on $this。https://codereview.stackexchange.com/questions/239567
复制相似问题