2024 年 Clojure 状态调查 中分享您的想法!

欢迎!请参阅 关于 页面以了解更多有关如何使用此功能的信息。

0 投票
ClojureScript
如果一个 JavaScript 类型被推断,则不考虑“基”属性。一个具体的例子是 {{js/document}},被推断为 {{js/HTMLDocument}}。如果代码使用了任何这些基属性,则即使编译为{{:advanced}}无误,也会触发一个推断警告。

{code:title=src/test/infer.cljs}
(ns test.infer)

(set! *warn-on-infer* true)

(.-documentElement js/document)



$ clj -m cljs.main -co '{:infer-externs true}' -c test.infer
WARNING: 无法解析推断类型 js/HTMLDocument 在表达式 (. js/document -documentElement) 中的属性 documentElement,位于行 5 /Users/mfikes/Desktop/test-infer/src/test/infer.cljs


如果您添加 {{-O advanced}},则可以确认 {{documentElement}} 在编译后的工件中未被破坏。

您还可以通过提示目标为基类型来解决这个问题


(.-documentElement ^js/Document js/document)


也许可以通过使用这些情况中的“extends”元数据来解决这个问题,以防在 externs 中检查基类型之前发出警告(或基于访问的属性推断基类型)。以下是上述示例中感兴趣的两个“extends”元数据:https://github.com/google/closure-compiler/blob/50713dceb16b369f8f317e5b49e8a9dec2b47496/externs/browser/w3c_dom2.js#L171

1 答案

0 投票
参考: https://clojure.atlassian.net/browse/CLJS-2928(由 mfikes 报告)
欢迎来到 Clojure 问答,在这里您可以向 Clojure 社区成员提问并获得答案。
...