diff --git a/types/rosie/index.d.ts b/types/rosie/index.d.ts index a6de6657ce005c..7ae92eb6156dfb 100644 --- a/types/rosie/index.d.ts +++ b/types/rosie/index.d.ts @@ -100,6 +100,7 @@ declare namespace rosie { attr(name: K, dependencies: [D1, D2], generatorFunction: (value1: T[D1], value2: T[D2]) => T[K]): IFactory; attr(name: K, dependencies: D[], generatorFunction: (value: T[D]) => T[K]): IFactory; attr(name: K, dependencies: D[], generatorFunction: any): IFactory; + attr(name: K, dependencies: string[], generatorFunction: (...dependencies: any[]) => T[K]): IFactory; /** * Convenience function for defining a set of attributes on this object as diff --git a/types/rosie/rosie-tests.ts b/types/rosie/rosie-tests.ts index ed53b76850d17d..32034ed39bd875 100644 --- a/types/rosie/rosie-tests.ts +++ b/types/rosie/rosie-tests.ts @@ -78,6 +78,20 @@ const person = Factory.build('Person'); let aString = ''; aString = person.firstName; +// It supports options not defined in the type definition +const personWithNicknameFactory = new Factory() + .attr('firstName', 'Frances') + .attr('lastName', 'Parker') + .option('nickname', null) + .attr('fullName', ['firstName', 'lastName', 'nickname'], (firstName, lastName, nickname) => { + if (nickname) { + return `${firstName} "${nickname}" ${lastName}`; + } + return `${firstName} ${lastName}`; + }); +// $ExpectType Person +const personWithNickname = personWithNicknameFactory.build({}, { nickname: 'Franny' }); + // Unregistered factories const unregisteredPersonFactory = new Factory();