derive-type
v1.0.5
Published
Generate TypeScript type definitions based on function invocations and embed them as JSDoc comments in your JavaScript code.
Downloads
44
Maintainers
Readme
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 viaDERIVE_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.