@HitGirl

Как правильно использовать for in в typescript?

Здравствуйте!
Почему typescript даже в цикле по свойствам считает что объект может быть undefined или что ключа нет в объекте?

interface IMain{
	user:string,
	val1:number,
	val2:number,
	val3:number
}

type IShort = {
	[Property in keyof IMain as Exclude<Property, "user">]?:number
}

function sum(a:IMain,b:IShort){
	for(const key in b)
		b[key as keyof typeof b] =  a[key as keyof typeof b] - (b[key as keyof typeof b] || 0)
	
	return b;
}

console.log(sum({user:"user1",val1:52,val2:71,val3:10},{val2:10,val3:15}))

Live demo
Подскажите, пожалуйста, можно ли избавиться в цикле от key as keyof typeof b и от || 0 или нет?
То есть приблизиться к такому виду:
for(const key in b)
	b[key] =  a[key] - b[key]
  • Вопрос задан
  • 61 просмотр
Решения вопроса 1
interface IMain {
	user: string;
	val1: number;
	val2: number;
	val3: number;
}

type IShort = Partial<Omit<IMain, 'user'>>;

function sum(a: IMain, b: IShort) {
	const keys = Object.keys(b) as (keyof IShort)[];
	for (const key of keys) {
		b[key] = a[key] - (b[key] ?? 0);
	}
	
	return b;
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы