现在在一个类中,我声明了一个类型为:CustomType的数组,如下所示
class Example {
public exampleArray: CustomType[];
public clearArray() {
this.exampleArray = [];
}
}
您可以看到clearArray分配了一个空数组的UNDEFINED类型,这似乎丢失了类型信息。
如何清除数组但保留其声明的类型?
答案 0 :(得分:9)
类型信息由字段(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 {}
答案 1 :(得分:1)
这则帖子似乎过时了。有一种新方法可以做到这一点。
this.array = [] as CustomType[];
答案 2 :(得分:0)
您可以尝试
this.exampleArray = <CustomType[]>[];
答案 3 :(得分:0)
可以使用3种方法清空数组
设置其长度= 0
myArr.length = 0;
使用 splice 方法Array
myArr.splice(0,myArr.length);
Pop()数组的每个元素
while(myArr.length){
myArr.pop();
}
答案 4 :(得分:0)
您始终可以通过更改长度来清除列表项 属性设置为0
例如:this.exampleArray.length = 0
将length设置为0会清除数组中的所有元素,而不会更改数组的引用。
答案 5 :(得分:0)
清除数组,即使它作为参数通过方法传递:
myArray.length = 0;