为什么typescript类字段都是未定义的并且没有特定类型的默认值?

时间:2018-01-08 20:46:04

标签: typescript

export class Customer {
    id: number;
    firstName: string;
 } 

让customer = new Customer();

在控制台日志中输出:

customer.id 未定义

customer.firstName 未定义

我希望id 0 firstName null 作为默认值,但尚未初始化。

为什么不是这样?

我使用TS 2.3.6

2 个答案:

答案 0 :(得分:1)

除了类的范围外,类属性声明与普通变量声明没有什么不同。假设您在没有类的情况下声明任何变量,

let id;
let firstName;
在JavaScript中

并检查它的值 - 默认情况下为undefined。打字稿只遵循javascript的行为。

答案 1 :(得分:1)

如果您想设置默认值,您必须手动执行此操作:

export class Customer {
    id: number = 0;
    firstName: string = null; // Warning, won't work if --strictNullChecks is enabled
 }

打字稿不会为您填写默认值,因为它不清楚在任何给定情况下哪种默认值是合适的。例如,在您的代码段中,您说firstName的默认值应为null,但在另一个用例中,它可能更有意义为空字符串。

此外,typecript设置默认值可能超出了范围,因为理想情况下,typescript只检查你的类型,但是代码与尽可能多的代码相同(即删除类型注释但保留其余部分)原样)。因此,如果需要,可以在开发人员上定义默认值。