我想告诉 TS 该类型符合预期,只需稍微改变一下添加字段即可。诀窍在于我不需要将字段添加到类型本身,而是将其添加到其某个字段集合中的可用元素集。
这虽然可行,但是却很冗长和笨重。
const explicit = this.element.nativeElement.attributes.banana;
我可以提高可读性。
const pre = this.element.nativeElement;
const implicit = pre.attributes.banana;
其实我已经有这个字段了,但是因为其他的考虑,所以输入如下,导致它因为输入错误而向我咆哮。
const typed = this.element.nativeElement as HTMLElement;
const boohoo = typed.attributes.banana;
当然,我可以作弊。但编写和使用 TSany
就像得到一个手电筒并让它由太阳能驱动一样。
const typed = this.element.nativeElement as HTMLElement;
const weehee = (typed.attributes as any).banana;
这就是为什么我想说,嘿 TS,让我们添加一个新字段as HTMLElement & { banana: string }
,但以这样的方式,香蕉成为属性的一部分,而不是元素本身。
const retyped = this.element.nativeElement as HTMLElement & { ??? };
我不知道该怎么做,我尝试过所有我能找到的例子。我知道这是可能的,因为它很奇怪地连贯。除了明确声明一种新类型之外,我看不出还有什么其他方法。而且不用作弊。
您可以像这样扩展您的转换类型:
我不确定你这样做想达到什么目的,但我猜这是你想要的: