1.0.5 • Published 2 years ago

derive-type v1.0.5

Weekly downloads
-
License
MIT
Repository
github
Last release
2 years ago

Derive Type

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

Demo

https://user-images.githubusercontent.com/1009936/188266007-269ee08a-392c-4dfe-af80-444059ebba39.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

npm.io

1.0.5

2 years ago

1.0.4

2 years ago

1.0.3

2 years ago

1.0.2

2 years ago

1.0.1

2 years ago

1.0.0

2 years ago

0.0.997

2 years ago

0.0.996

2 years ago

0.0.995

2 years ago

0.0.994

2 years ago

0.0.993

2 years ago

0.0.992

2 years ago

0.0.991

2 years ago

0.0.99

2 years ago

0.0.98

2 years ago

0.0.97

2 years ago

0.0.96

2 years ago

0.0.95

2 years ago

0.0.94

2 years ago

0.0.93

2 years ago

0.0.92

2 years ago

0.0.91

2 years ago

0.0.9

2 years ago

0.0.8

2 years ago

0.0.7

2 years ago

0.0.6

2 years ago

0.0.5

2 years ago

0.0.4

2 years ago

0.0.3

2 years ago

0.0.2

2 years ago

0.0.1

2 years ago