将Typescript数组设置为undefined

时间:2017-10-26 07:39:56

标签: typescript

我正在开发一个Angular 2应用程序。这是我第一次使用Angular或Typescript。

我在一个类中有这个变量:

public products: IProduct[];

IProduct是:

interface IProduct {
    productCode: string;
    description: string;
    lawId: number;
    name: string;
    comment: string;
    emvoProduct?: IEmvoProduct; // ?: Optional.
}

有没有办法将其设置为未定义?

当我这样做时:

this.products = undefined;

我收到错误说:

  

(TS)Type' undefined'无法转换为类型' IProduct []'。

3 个答案:

答案 0 :(得分:4)

因为您strictNullChecks中的tsconfig.json编译选项;你可以简单地删除或设置为false。

或者,您必须指定该字段可以是未定义的:

products: IProduct[] | undefined

另一种选择是delete

delete this.products

当你检查它时,这将真正使字段undefined因为它根本不在那里。打字稿会很满意 - 即使是strictNullCheck: true

答案 1 :(得分:0)

undefined是它自己的类型,因此您需要将声明更改为:

public products: IProduct[]?; // optional property
// or
public products: IProduct[] | undefined; // explicit intersection with undefined 

现在products不一定是数组,在将其视为数组之前,需要使用类型保护。我们不需要编写自己的,因为我们可以使用instanceof Array,它被TypeScript识别为类型保护:

if (this.products instanceof Array) {
    // use this.products as an array
}

或者,您可以将strictNullChecks设置为false(通过删除编译器开关--strictNullCheckstsconfig.json),以便nullundefined是每种类型的允许值。就个人而言,我建议不要这样做,并尝试逐案处理可能的nullundefined

答案 2 :(得分:0)

不要为其分配任何值,它将保持未定义状态。

公共产品:IProduct [];