我正在开发一个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 []'。
答案 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
(通过删除编译器开关--strictNullChecks
或tsconfig.json
),以便null
或undefined
是每种类型的允许值。就个人而言,我建议不要这样做,并尝试逐案处理可能的null
和undefined
。
答案 2 :(得分:0)
不要为其分配任何值,它将保持未定义状态。
公共产品:IProduct [];