首页 > 解决方案 > Clojurescript 高级编译无法访问的代码

问题描述

我刚刚在我的 Clojurescript 项目中添加了一个新库( https://github.com/ptaoussanis/tempura/blob/master/README.md )。

WARNING: /matter/titan/source/titan-ui/out/taoensso/tempura/impl.js:96: WARNING - unreachable code}catch (e20422){if((e20422 instanceof Error)){

我也收到此错误:

Use of undeclared Var goog.structs/Map
(def ^:private coerce-xhr-params "Returns [<uri> <?data>]"
(let [url-encode
(fn url-encode
([params]
(when (seq params)
(-> params clj->js gstructs/Map. gquery-data/createFromMap .toString)))
                   ^---
([uri params]
(let [qstr (url-encode params)
          uri-with-query (if (str/blank? qstr) uri (str uri "?" qstr))]
          [uri-with-query nil])))

我需要为此写一个“外部”吗?那看起来像什么?

标签: clojurescript

解决方案


从您的代码和问题详细信息中很难分辨,但我假设您在高级编译模式下调用库时遇到问题。

现代简单的方法是完全跳过 externs 的事情,只编写调用/获取而不是互操作形式,而是使用https://github.com/binaryage/cljs-oops库。

那时您无需做任何其他事情 - 默认情况下,您的所有代码都将在高级编译中幸存下来,不需要外部!

eg(.-nativeProp obj)看起来像(oget obj "nativeProp"), 并ocall相应地用于函数调用。


推荐阅读