在Angular中获取对象的属性类型

问题描述 投票:0回答:1

我在Angular 6上课

export class classXY{
  xValue: number;
  yValue: number;
  xDate: Date;
  yDate: Date;
  xName?: string;
  yName?: string;
}

在我的代码中,我需要检查具有类型编号的属性。

let obj: ClassXY;
obj.xValue=1;
obj.yValue=null;
obj.xDate= new Date();
obj.yDate= null;
obj.xName= "test";
obj.yName= null;

    for (var key in obj) {
      if ((obj[key] == null) && (typeof obj[key] === "number"))
        obj[key] = -1;
}

typeof obj [“yValue”]的值为null,typeof“yValue”是字符串,而我需要返回属性编号的类型。例如,相同

我如何检查对象的基本属性类型?

typescript angular6 typeof
1个回答
1
投票

TypeScript编译为JavaScript,JavaScript是动态类型语言。这意味着变量的类型可以在运行时更改,如下所示:

let a = null;
console.log(typeof a);

a = 5;
console.log(typeof a);

a = 'hello';
console.log(typeof a);

在你的情况下,你的条件永远不会评估为真,因为如果obj[key]null,那么它的类型不能是number

if ((obj[key] == null) && (typeof obj[key] === "number"))

下面是一种使用属性初始值设定项为您的类字段提供默认值的方法,以及将这些字段与构造类对象时分配的默认值进行比较的函数:

function setDefaultValues(obj, defaultValues, valueToCheck) {
  for (const prop in obj) {
    if (defaultValues[prop] === valueToCheck && obj[prop] === null) {
      obj[prop] = valueToCheck;
    }
  }
}

class A {
  x = -1; // default value
  y = -1; // default value
  z = 'hello';
}

const a = new A();
a.y = null; // a.y will be replaced by -1 later
console.log(a);

setDefaultValues(a, new A(), -1); // check all -1 fields on `new A()`, if null on `a`, then set to -1
console.log(a);
© www.soinside.com 2019 - 2024. All rights reserved.