gpt4 book ai didi

javascript - 处理 JavaScript 中的类方法名称冲突

转载 作者:太空宇宙 更新时间:2023-11-04 15:24:40 25 4
gpt4 key购买 nike

tl;博士:

我的类的方法名称与其扩展的类上的相同名称冲突。我可以重命名我的类,但我更喜欢一个不需要进行重大更改的解决方案。

背景

我发布了一个名为 lit-apollo 的库,导出 class LitElement 延伸。用户应该定义自己的customElements在我的类(class)中,这些元素可以使用 apollo graphql 获取数据,并使用 lit-html 进行渲染。请参阅README举一个简单的例子。

问题

LitElement 的最新版本公开了一个名为 update 的实例方法。 ,可以选择重写哪些实现来控制元素呈现的方式和时间。 我的图书馆还有一个 update属性,对应 update option of Apollo mutation constructors .

import gql from 'graphql-tag'
import { ApolloMutation, html } from 'lit-apollo/apollo-mutation'

const mutation = gql`
mutation($id: ID!) {
MyMutation(id: $id) {
myResponse
}
}
`

const updateFunc = (cache, response) =>
cache.writeData(doSomethingWith(cache, response))

class MutatingElement extends ApolloMutation {
constructor() {
this.mutation = mutation;
this.variables = {id: "foo"};
// here's where we break the LitElement contract
this.update = updateFunc;
}

render() {
return html`<div>${this.data.myResponse}</div>`
}
}

customElements.define('mutating-element', MutatingElement)

这两种方法显然是相互冲突的。

问题

我知道我可以对 lit-apollo 发出重大更改它将它自己重命名为 update方法onUpdate或类似的问题,但我如何在不破坏类的 API 并因此需要主要版本的情况下解决这个问题?

我虽然检查第一个参数以查看它是否是 ApolloCache 的实例,然后将参数路由到 super.update根据需要,但我认为这会破坏 LitElement 合约,从而阻止用户实现自己的 LitElement 版本 update

遇到这种情况你会如何处理?

最佳答案

I know I could just issue a breaking change to lit-apollo, but how might I address this problem without breaking my classes' APIs?

你不能,真的。但这不是你的错:

LitElement's latest version exposes an instance method called update

是重大改变。因此,如果您将 lit-element 依赖项更新到最新版本,则还必须创建一个主要版本。为此重命名您的 update 方法是很自然的。或者,保留您的 API 并继续使用旧的 lit-element 版本。

关于javascript - 处理 JavaScript 中的类方法名称冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52463778/

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