typescript - Är det möjligt att sätta fältvärden från ett objekt med TypeOrm?


Är det möjligt att sätta fältvärden från ett objekt med TypeOrm och bevara typ-säkerhet?

Alla exempel jag hittade i dokumentationen föreslår att du ska ställa in egenskaper en efter en

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

Det skulle vara mycket trevligare om jag kunde ställa in fält på det här sättet:

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

Det skulle göra det möjligt att använda genvägar

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

Och använd komposition

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

även om jag inte kunde hitta något sätt att göra det.

Jag förstår att du behöver ha en typ som beskriver formen på ditt objekt för att uppnå det, men jag hoppades att TS/TsOrm på något sätt kan härleda det från de modeller jag definierar.

Svar #1

Metoderna create och merge för en entitet eller ett repository (beroende på din implementation) är troligtvis vad du letar efter:

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

För ytterligare information, konsultera dokumentationen och bläddra ned till de nämnda metoderna som inkluderar följande exempel:

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

Relaterade artiklar