Назначение свойства объекта с использованием другого свойства объекта вызывает ошибку в Typescript - PullRequest
0 голосов
/ 19 июня 2020

Проблема, с которой я столкнулся в проекте, может быть упрощена следующим образом:

const obj1 = {
  name: 'bob',
  age: 18
}

const obj2 = {
  name: 'tom',
  age: 19
}
for (const key in obj1) {
  obj1[key] = obj2[key]
}
for (const key in obj1) {
  type Key = keyof typeof obj1
  obj1[key as Key] = obj2[key as Key]
}
for (const key in obj1) {
  type Key = keyof typeof obj1
  type Value = typeof obj1[Key]
  (obj1[key as Key] as Value) = obj2[key as Key]
}

Первый for сказал No index signature with a parameter of type 'string' was found on type '{ name: string; age: number; }'. Я полностью понимаю, поэтому я попробовал второй for.

Второй for сказал Type 'string | number' is not assignable to type 'never'. Type 'string' is not assignable to type 'never', что меня очень смутило.

Хотя мне удалось использовать третий for, я до сих пор не могу понять, почему Typescript отображал эту ошибку: Type 'string | number' is not assignable to type 'never'. Type 'string' is not assignable to type 'never'

Весь код можно найти на этой детской площадке

1 Ответ

0 голосов
/ 19 июня 2020

Поскольку вы не объявили типы для obj1 и obj2 должным образом, машинописный текст выводит типы как никогда

const obj1:Record<string,string|number>= {
  name: 'fan',
  age: 18
}

const obj2:Record<string,string|number>= {
  name: 'fan2',
  age: 19
}
for (const key in obj1) {
  obj1[key] = obj2[key]
}

даже первый синтаксис не выдаст ошибку, если мы объявим типы для объекты

Детская площадка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...