TypeScript: How to define custom typings for installed npm package?

maiermic picture maiermic · Jun 5, 2016 · Viewed 16k times · Source

I like to use rx-node within TypeScript

import RxNode from 'rx-node';

I installed rx-node using npm

$ npm install rx-node --save

I searched for type definitions, but without any result

$ typings search rx-node
No results found for search

How can I define custom type definitions for the installed npm module rx-node? Where should I store the type definition file? How to configure TypeScript (tsconfig.json and typings.json)?

Edit: Thanks to Aleksey L. and David Bohunek I achieved to define a rx-node.d.ts that looks like this

declare module "rx-node" {
  import {Observable} from '@reactivex/rxjs';
  import {ReadLine} from "readline";

  function fromReadLineStream(stream: ReadLine): Observable<string>
}

I installed @reactivex/rxjs

npm install --save @reactivex/rxjs

Since I got an error

node_modules\@reactivex\rxjs\dist\cjs\Observable.d.ts (10,66): Cannot find name 'Promise'. (2304)

I changed the target in tsconfig.json to es6.

Answer

Aleksey L. picture Aleksey L. · Jun 5, 2016

Beware, this is old question (2016) regarding managing definitions using typings which is deprecated in favor of installing them straight via npm


You can add custom definitions to typings.json. For example having following folder structure:

/typings
    /custom
        rx-node.d.ts
    /global
        ...

where rx-node.d.ts is your custom typings file. For example:

declare module RxNode {
    export interface ...
}

Then install with a command

typings install file:typings/custom/rx-node.d.ts --save --global

Or manually: in typings.json add reference to this typings file:

{
    "name": "TestName",
    "version": false,
    "globalDependencies": {
        "rx-node": "file:typings/custom/rx-node.d.ts"
    }
}

And run typings install