typescript - 获取Angular中对象的属性类型
问题描述
我在 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"] value 是 null 并且typeof "yValue"是 string,而我需要返回属性编号的类型。与instanceof相同
如何检查对象的原始属性类型?
解决方案
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);
推荐阅读
- swift - NSComboBox 点击后立即消失
- mysql - 使用子查询从不同表中选择计数
- php - 将值附加到其受人尊敬的数组 PHP
- docker - Azure devops 管道 restAPI 如何使用 SourceFolder 为 CopyFiles 任务传递变量,容器中的自托管代理
- javascript - 使用 useReducer 和 React Context API 时,Reducer 运行两次
- ruby-on-rails - Rails 管理员:如何隐藏活动存储模型?
- azure - Botframework间歇性HTTP状态码GatewayTimeout
- python - 在循环中更新熊猫中的一堆行
- python-3.x - 优雅地将 int64 的 numpy 数组转换为 datetime64 的 numpy 数组
- azure-devops - Azure Pipelines & Nuget Packages - 将包版本设置为标记版本