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);