// Make all properties optionalPartial<User>// Make all properties requiredRequired<User>// Pick specific propertiesPick<User,'id'|'email'>// Omit specific propertiesOmit<User,'password'>// Make properties readonlyReadonly<User>
// Result type patterntypeResult<T,E=Error>=|{ok:true;value:T}|{ok:false;error:E};asyncfunctionfetchUser(id:string):Promise<Result<User>>{try{constuser=awaitdb.users.findById(id);if(!user){return{ok:false,error:newError('User not found')};}return{ok:true,value:user};}catch(error){return{ok:false,error:errorasError};}}
import{describe,test,expect,vi}from'vitest';describe('UserService',()=>{test('creates user with valid email',async()=>{constservice=newUserService(mockRepo);constuser=awaitservice.create('test@example.com');expect(user.email).toBe('test@example.com');});test('throws on invalid email',async()=>{constservice=newUserService(mockRepo);awaitexpect(service.create('invalid')).rejects.toThrow();});});