
Research
Malicious npm Packages Impersonate Flashbots SDKs, Targeting Ethereum Wallet Credentials
Four npm packages disguised as cryptographic tools steal developer credentials and send them to attacker-controlled Telegram infrastructure.
@commander-js/extra-typings
Advanced tools
Infer strong typings for commander options and action handlers
This package offers TypeScript typings for commander
which infer strong types for:
.opts()
This package requires TypeScript 5.0 or higher.
The runtime is supplied by commander. This package is all about the typings.
Usage
@commander-js/extra-typings
using your preferred package managercommander
, if not already installed (peer dependency)@commander-js/extra-typings
instead of commander
(or set up an ambient module)The installed version of this package should match the major and minor version numbers of the installed commander package, but the patch version number is independent (following pattern used by Definitely Typed).
Credit: this builds on work by @PaperStrike in https://github.com/tj/commander.js/pull/1758
Command
, Argument
, or Option
(see subclass.test-d.ts)
this
Command
returns base class not subclass from .command(name)
Option
and Argument
The types are built up as the options and arguments are defined. The usage pattern for action handlers is easy. Just chain the action handler after the options and arguments.
import { program } from '@commander-js/extra-typings';
program.command('print')
.argument('<file>')
.option('--double-sided')
.action((targetFile, options) => {
// command-arguments and options are fully typed
});
For working with a single command without an action handler, the configuration need to be done at the same time as the variable is declared.
import { Command } from '@commander-js/extra-typings';
// broken pattern
const program = new Command(); // program type does not include options or arguments
program.option('-d, --debug'); // adding option does not change type of program
const options = program.opts(); // dumb type
import { Command } from '@commander-js/extra-typings';
// working pattern
const program = new Command()
.option('-d, --debug'); // program type includes chained options and arguments
const options = program.opts(); // smart type
An alternative approach is to setup @commander-js/extra-typings
as an ambient module and a development-only dependency. We only worked
this out recently so it isn't being promoted as the suggested method yet!
Add a simple ambient module file to your project to use the enhanced typings instead of the default typings:
// commander.d.ts
declare module "commander" {
export * from "@commander-js/extra-typings";
}
Import from commander
as usual and you hopefully get the extra typings from the ambient module without needing extra-typings
at runtime:
import { Command } from 'commander';
const program = new Command()
.option('-d, --debug');
const options = program.opts(); // smart type
[14.0.0] (2025-05-18)
.helpGroup()
on Option
and Command
, and higher-level .optionsGroup()
and .commandsGroup()
which can be used in chaining way to specify group title for following options/commands ([#100])parseArg
property to Argument
class ([#93])Help
class adding .formatItemList()
and .groupItems()
methods ([#93])FAQs
Infer strong typings for commander options and action handlers
The npm package @commander-js/extra-typings receives a total of 633,793 weekly downloads. As such, @commander-js/extra-typings popularity was classified as popular.
We found that @commander-js/extra-typings demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Four npm packages disguised as cryptographic tools steal developer credentials and send them to attacker-controlled Telegram infrastructure.
Security News
Ruby maintainers from Bundler and rbenv teams are building rv to bring Python uv's speed and unified tooling approach to Ruby development.
Security News
Following last week’s supply chain attack, Nx published findings on the GitHub Actions exploit and moved npm publishing to Trusted Publishers.