如何清除打字稿中的类型化数组并保留其类型?

新手上路,请多包涵

现在在一个类中,我声明了一个类型为 CustomType 的数组,如下所示

class Example {
  public exampleArray: CustomType[];
  public clearArray() {
    this.exampleArray = [];
  }
}

如您所见,clearArray 分配了一个空数组的 UNDEFINED 类型,这似乎丢失了类型信息。

我如何清除数组但保留其声明的类型?

原文由 Vincent-cm 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 197
2 个回答

类型信息由字段上的类型注释确定 ( exampleArray: CustomType[] )。在运行时,Javascript 数组无论如何都是无类型的。编译器将允许将空数组 ( [] ) 分配给任何东西,因为这被认为是安全的,因为里面没有对象,它可以是 CustomType 的数组。然后,字段类型将阻止您推送到任何其他类型的数组对象:

 class CustomType { x: number}
class Example {
    public exampleArray: CustomType[];
    public clearArray() {
        this.exampleArray = [];
        this.exampleArray.push(new CustomType())
        this.exampleArray.push({}) // error not a `CustomType`
    }
}

笔记

如果这是一个没有类型注释的变量,该变量将被推断为 any[] ,这可能会导致问题(在分配数组文字时或将推送到大批):

 let noAnnotationArray = [] //  any[]

在这种情况下,添加类型注释仍然是最好的方法。如果稍后有人将项目添加到数组中,类型断言(如其他答案中所建议的)可能会导致未捕获的错误:

 let withAnnotation:CustomType[] = [{}] //  error
let withAssertion = <CustomType[]>[{}] // no error even though we assign {}

原文由 Titian Cernicova-Dragomir 发布,翻译遵循 CC BY-SA 4.0 许可协议

这篇文章似乎已经过时了。有一种新方法可以做到这一点。

 this.array = [] as CustomType[];

原文由 Luke Becker 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题