gpt4 book ai didi

javascript - 如何清除 typescript 中的类型化数组并保留其类型?

转载 作者:太空狗 更新时间:2023-10-29 17:43:08 24 4
gpt4 key购买 nike

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

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

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

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

最佳答案

类型信息由字段上的类型注释确定(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[]

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

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

关于javascript - 如何清除 typescript 中的类型化数组并保留其类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52553868/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com