在 TypeScript 中定义命名空间解析器



我不知道如何在TypeScript中正确定义namespaceResolver函数。我有以下resolver功能:

(prefix: string): string => {
    if (prefix === "wms") {
        return "http://www.opengis.net/wms";
    } else {
        return null;
    }

但是编译器抱怨说:

TS2345:类型为"(前缀:字符串(=>字符串"的参数不是 可分配给类型为"XPathNSResolver"的参数。 财产 类型"(前缀:字符串(=>字符串"中缺少"lookupNamespaceURI"。

如果我在lib.dom.d.ts中检查实现,lookupNaemspaceURI的返回值也是string。所以我不知道我应该如何解决这个问题。

lib.dom.d.ts

interface XPathNSResolver {
    lookupNamespaceURI(prefix: string): string;
}

编辑

这是整个代码:

doc.evaluate("/wms:WMS_Capabilities/wms:Service/wms:Name", doc, (prefix: string): string => {
                    if (prefix === "wms") {
                        return "http://www.opengis.net/wms";
                    } else {
                        return null;
                    }
                }, XPathResult.STRING_TYPE, null);

好的,所以我想通了。

我首先创建了一个XPathNSReslover

private xpathResolver: XPathNSResolver = {
        lookupNamespaceURI: prefix => {
            if (prefix === "wms") {
                return "http://www.opengis.net/wms";
            } else {
                return null;
            }
        }
    };

然后,我只需在evaluate方法实现中使用此xpathResolver

doc.evaluate("/wms:WMS_Capabilities/wms:Service/wms:Name", doc, this.xpathResolver, XPathResult.STRING_TYPE, null);

对于遇到此问题的任何人,我建议使用"xpath-ts"而不是"xpath"。使用 xpath-ts,可以避免复杂的键入(例如在其他解决方案中(。

最新更新