ts-object-transformer
Typescript Type-safe object transformation, with no magic (no decorators, no typescript compilation plugins)
Useful for JSON mappings with complex JS/TS types (Date, Regex etc.)
Requirements
Typescript >= 2.8
Install
$ npm install ts-object-transformer
API
transformObject // Standard plain object literal coming, most of the time from serverside, // generally described by an interface objectLiteral, // Applying some mapping aimed at converting input values above and change their type representation // Rules are : // - Keys should be a subset of objectLiteral's keys; Omitting key will not make any field transformation. // - Values should be a function taking objectLiteral[key] and returning a transformed value // If you're not following these rules, there will be a compilation error fieldMappings?, // Aimed at generating new "computed" properties // Rules are : // - Keys *cannot* be one of objectLiteral's keys // - Values should be a function taking objectLiteral[key] and returning a tranformed value // If you're not following these rules, there will be a compilation error computedMappings?);// Returns a result having :// - Same keys than objectLiteral// - Types of these keys potentially translated using fieldMappings' transformations return types// - New keys corresponding to computedMappings' keys & transformations return types
Usage
; ; // Doesn't compile : Argument of type "blah" doesn't exist on type// let blah = transformedResult.blah; // Doesn't compile : "type 'Date' is not assignable to type 'number'"// Proves that date2 has been converted to Date// let num: number = transformedResult.date2; console.logtransformedResult.date; // 1538604000000console.logtransformedResult.date2; // 2018-10-03T22:00:00.000Z (new Date(1538604000000))console.logtransformedResult.aString; // Hello worldconsole.logtransformedResult.idempotentValue; // fooconsole.logtransformedResult.computed; // Hello%20World__foo
You can omit either fieldMappings or computedMappings (or both, but it's useless :-) :
; console.logtransformedResult2.date; // 1538604000000console.logtransformedResult2.date2; // 2018-10-03T22:00:00.000Z (new Date(1538604000000))console.logtransformedResult2.aString; // Hello worldconsole.logtransformedResult2.idempotentValue; // foo ;console.logtransformedResult3.date; // 2018-10-04T00:00:00+0200console.logtransformedResult3.date2; // 1538604000000console.logtransformedResult3.aString; // Hello%20worldconsole.logtransformedResult3.idempotentValue; // fooconsole.logtransformedResult3.computed; // Hello%20World__foo
License
MIT