使用@lit-labs/context的@consume装饰器时出现TypeScript错误的原因
问题原因及解决办法
错误原因
这个TypeScript错误源于@lit-labs/context v0.3.3的类型定义与你当前使用的Lit核心包(LitElement所属包)类型存在私有属性不兼容问题。
TypeScript的私有属性采用名义类型规则——只要两个类的同名私有属性声明位置不同,就会被判定为类型不兼容。@consume装饰器要求接收ReactiveElement类型实例,但你的MyComponent继承的LitElement中的__instanceProperties私有属性,和装饰器依赖的ReactiveElement类型里的同名私有属性声明来源不同,导致TS抛出类型不匹配错误。
解决办法
- 升级@lit-labs/context版本:v0.3.3属于旧版本,后续发布的v0.4.x及以上版本已经修复了该类型兼容问题。直接升级到与你的Lit、TypeScript版本匹配的最新稳定版即可解决错误。
- 核对Lit核心包版本兼容性:确保
lit或lit-element的版本与@lit-labs/context版本匹配,比如Lit 2.6+搭配@lit-labs/context v0.4+能有效避免这类类型冲突。 - 临时规避:类型断言:如果暂时无法升级,可以给
@consume装饰器添加类型断言跳过检查,示例代码如下:
注:这只是临时方案,长期来看优先选择升级版本解决根本问题。@(consume({ context: loggedInContext }) as any) @property({ attribute: false }) loggedIn: boolean = false;
内容的提问来源于stack exchange,提问作者dbuss1
相关产品推荐
相关产品推荐

