打字稿:输入断言为任何,这是什么意思?

时间:2018-05-10 00:29:31

标签: reactjs typescript casting react-redux assertion

我试图理解代码的一部分是如何工作的。我以前见过类型断言,但出于某种原因,我无法绕过这个。

(this.whatever as any).something([]);

更大的代码部分:

    resetThis(): void {
    if (this.whatever) {
        (this.whatever as any).something([]);
    }
}

尝试运行此块时,我收到错误:this.whatever.someting is not a function

2 个答案:

答案 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。这意味着它可以拥有它想要的任何属性或方法。