Skip to content

Derive types dynamically by running tests to capture value combinations

License

Notifications You must be signed in to change notification settings

David-Kunz/derive-type

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

90 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Derive Type

Generate TypeScript type definitions based on function invocations and embed them as JSDoc comments in your JavaScript code.

Demo

demo.mov

Installation

npm i -D derive-type

Simple Example

Original source code:

// main.js

function myFunction(x, y) {
  console.log(x, y)
}

myFunction(1, 2)

Add this function call at the top of your function body:

// main.js

function myFunction(x, y) {
  require('derive-type')(x, y) // <- ADD THIS
  console.log(x, y)
}

myFunction(1, 2)

Then invoke the binary with the code to trigger the function invocations:

npx derive-type node main.js

This will generate the TypeScript definition, insert the JSDoc snippet and remove the call to derive-type:

// main.js

/** @type { import("/var/folders/ls/xxxx/T/derive-type-gen/KC9Vc2Vycy9kMDY1MDIzL3Byb2plY3RzL0Rldk9uRHV0eS9kZXJpdmUtdHlwZS10ZXN0L3Rlc3QuanM6NDoyNSk=").GEN } Generated */
function myFunction(x, y) {
  // now you know that `x` and `y` are of type `number`
  console.log(x, y)
}

myFunction(1, 2)

Notes

  • The function invocations don't need to be in the same file, usually they are based on tests:
    npx derive-type npm test
  • The generated types are based on the merged input of all function invocations.
  • The function definition must begin in a new line.
  • You can also install derive-type globally, then you must use the path of your global package, e.g. require("/usr/local/lib/node_modules/derive-type/").
  • The generated types are located in os.tmpdir() (changeable via DERIVE_TYPE_FOLDER).
  • The generated types are deleted after 5 days (changeable via DERIVE_TYPE_MAX_AGE_DAYS).
  • Debugging output can be enabled by setting DERIVE_TYPE_DEBUG to true.
  • You can find some example type generations in the test file.

Introduction Video

About

Derive types dynamically by running tests to capture value combinations

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published