我试图理解代码的一部分是如何工作的。我以前见过类型断言,但出于某种原因,我无法绕过这个。
(this.whatever as any).something([]);
更大的代码部分:
resetThis(): void {
if (this.whatever) {
(this.whatever as any).something([]);
}
}
尝试运行此块时,我收到错误:this.whatever.someting is not a function
答案 0 :(得分:1)
您的代码等同于此纯JavaScript代码:
this.whatever.something([]);
当您在TypeScript中说as any
时,您告诉编译器忽略前面表达式的先前类型,而是将其视为any
类型。因此,在您的情况下,您告诉编译器this.whatever
类型为any
。
TypeScript中的any
类型基本上是一种类型,意思是“我们对这个变量的真正含义一无所知,所以让我用它做任何我想做的事”。 TypeScript手册将其描述为"opting out of typechecking"。
答案 1 :(得分:0)
假设this.whatever
的类型为IMyType
。
使用:
IMyType {
prop1: string;
prop2: string;
}
所以如果你调用this.whatever.something([])
,编译器会尖叫。因为something([])
中未定义IMyType
函数。
使用as any
将告诉编译器,对于该特定语句,它应该将this.whatever
视为类型any
。这意味着它可以拥有它想要的任何属性或方法。