typescript - Este posibil să setezi valorile câmpurilor dintr-un obiect folosind TypeOrm?


Este posibil să setezi valorile câmpurilor dintr-un obiect folosind TypeOrm păstrând siguranța tipurilor?

Toate exemplele pe care le-am găsit în documentație sugerează să setezi proprietățile una câte una

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

Ar fi mult mai plăcut dacă aș putea seta câmpurile în acest mod:

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

Ar permite utilizarea scurtăturilor

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

Și folosește compoziția

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

deși nu am putut găsi nicio modalitate de a face acest lucru.

Înțeleg că trebuie să ai un tip care să descrie forma obiectului tău pentru a-l realiza, dar speram că TS/TsOrm poate să-l deducă cumva din modelele pe care le definesc.

Răspuns #1

Metoda create și merge a unei entități sau a unui repository (în funcție de implementarea ta) va fi cel mai probabil ceea ce cauți:

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

Pentru informații suplimentare, consultați documentația și derulați în jos până la metodele menționate, care includ următoarele exemple:

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