Можно ли установить значения полей из объекта, используя TypeOrm? - PullRequest
0 голосов
/ 08 апреля 2019

Можно ли установить значения полей из объекта, используя TypeOrm, сохраняющий тип safity?

Все примеры, которые я нашел в документации, предлагают вам установить свойства один за другим

const newUser = new User();
newUser.firstName = 'John'
newUser.lastName = 'Doe'
newUser.role = 'manager'
newUser.phone = '1234567890'
newUser.login = 'john.doe'
newUser.password = '12345'
newUser.save();

Было бы намного лучше, если бы я мог установить поля следующим образом:

const newUser = new User();
newUser.setFields({
        firstName: 'John',
        lastName: 'Doe',
        role: 'manager',
        phone: '1234567890',
        login: 'john.doe',
        password: '12345'
    }
);
newUser.save();

Это позволит использовать ярлыки

const newUser = new User();
newUser.setFields({
        firstName,
        lastName,
        role,
        phone,
        login: 'john.doe',
        password: '12345'
    }
);
newUser.save();

И использовать состав

const newUser = new User();
newUser.setFields({
        firstName,
        lastName,
        role,
        phone,
        ...credentials
    }
);
newUser.save();

хотя я не мог найти способ сделать это.

Я понимаю, что вам нужен тип, описывающий форму вашего объекта, чтобы достичь его, но я надеялся, что TS / TsOrm может каким-то образом получить его из моделей, которые я определяю.

1 Ответ

1 голос
/ 08 апреля 2019

Метод create и merge объекта или репозитория (в зависимости от вашей реализации) будет наиболее вероятным для вас:

const userEntity = UserEntity.create({ firstName, lastName, ...someOtherStuff });
const mergedEntity = UserEntity.merge(mergedEntity, { lastName: "new last name" });

Для получения дополнительной информации обратитесь к документации и прокрутите вниз до упомянутых методов, которые включают следующие образцы:

const user = repository.create(); // same as const user = new User();
const user = repository.create({
    id: 1,
    firstName: "Timber",
    lastName: "Saw"
}); // same as const user = new User(); user.firstName = "Timber"; user.lastName = "Saw";

const user = new User();
repository.merge(user, { firstName: "Timber" }, { lastName: "Saw" });
// same as user.firstName = "Timber"; user.lastName = "Saw";
...