【问题标题】:Typescript: Type assertion as any, what does this mean?Typescript:类型断言 as any,这是什么意思?
【发布时间】:2018-05-10 00:29:30
【问题描述】:

我试图了解一段代码是如何工作的。我以前见过类型断言,但由于某种原因,我无法理解这一点。

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

更大的代码部分:

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

尝试运行此块时出现错误:this.whatever.someting is not a function

【问题讨论】:

  • 它断言this.whateverany。这意味着您可以从中访问任何属性。
  • 所以 .something 将是他们/我试图访问的属性?

标签: reactjs typescript casting react-redux assertion


【解决方案1】:

您的代码等同于这段纯 JavaScript 代码:

this.whatever.something([]);

当您在 TypeScript 中说 as any 时,您是在告诉编译器忽略前面表达式的先前类型,而是将其视为 any 类型。因此,在您的情况下,您是在告诉编译器 this.whatever 的类型为 any

TypeScript 中的any 类型基本上是一种表示“我们对这个变量的真正含义一无所知,所以让我对它做任何我想做的事情”的类型。 TypeScript 手册将其描述为"opting out of typechecking"

【讨论】:

    【解决方案2】:

    假设this.whatever 的类型为IMyType

    与:

    IMyType {
      prop1: string;
      prop2: string;
    }
    

    所以如果你调用this.whatever.something([]),编译器会尖叫。因为something([])函数没有在IMyType中定义。

    使用as any 将告诉编译器对于该特定语句,它应该将this.whatever 视为any 类型。这意味着它可以拥有任何它想要的属性或方法。

    【讨论】:

      猜你喜欢
      • 2023-03-14
      • 2017-07-21
      • 1970-01-01
      • 2020-05-12
      • 1970-01-01
      • 2021-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多