Вопрос или проблема
При компиляции этого TypeScript кода:
interface Jugador {
id?: string;
equipoId?: string[];
}
let jugador:Jugador = Object.create({
id: '283428724',
equipoId: ['234827382']
});
console.log( jugador );
console.log( typeof jugador );
Я получаю следующий JavaScript код:
var jugador = Object.create({
id: '283428724',
equipoId: ['234827382']
});
console.log(jugador);
console.log(typeof jugador);
И выполнение возвращает следующее:
$ node test.js
{}
object
Почему созданный объект пустой? Результат, который я ожидаю, похож на
{
id: '283428724',
equipoId: ['234827382']
}
Когда вы используете Object.create()
, свойства, которые вы определяете в объектном литерале, добавляются к прототипу нового объекта, а не напрямую к самому объекту. Это приводит к тому, что console.log(jugador)
печатает пустой объект.
Чтобы получить ожидаемый результат, вы можете либо напечатать прототип для jugador
console.log(Object.getPrototypeOf(jugador));
Или присвоить их напрямую:
let jugador = {
id: '283428724',
equipoId: ['234827382']
};
console.log(jugador);
Ответ или решение
Когда вы используете метод Object.create()
, создается новый объект с указанным объектом в качестве прототипа. Это важный момент, который объясняет, почему созданный вами объект jugador
оказывается пустым.
В вашем примере вы делаете следующее:
let jugador = Object.create({
id: '283428724',
equipoId: ['234827382']
});
Здесь вы создаете объект jugador
, но свойства id
и equipoId
не добавляются непосредственно к этому объекту, а становятся свойствами его прототипа. Поэтому, когда вы выполняете console.log(jugador)
, вы видите {}
— пустой объект, поскольку у него нет собственных свойств.
Чтобы увидеть свойства, которые вы указали, вам нужно либо получить прототип объекта jugador
, как показано ниже:
console.log(Object.getPrototypeOf(jugador));
Этот код выведет объект с вашими свойствами id
и equipoId
.
Либо, если вам нужно, чтобы свойства находились непосредственно на создаваемом объекте, вам нужно будет задать их напрямую, вместо использования Object.create()
. Например:
let jugador = {
id: '283428724',
equipoId: ['234827382']
};
console.log(jugador);
В этом случае console.log(jugador)
выведет:
{
id: '283428724',
equipoId: ['234827382']
}
В заключение, метод Object.create()
создаёт объект с указанным прототипом, а прямое присвоение значений создаёт объект с собственными свойствами. Надеюсь, это объяснение помогло вам понять, почему результат не совпадал с вашими ожиданиями.