TypeScript: Как определить настраиваемые типизации для установленного пакета npm?

Мне нравится использовать rx-node в TypeScript

import RxNode from 'rx-node';

Я установил rx-node с помощью npm

$ npm install rx-node --save

Я искал определения типов, но без каких-либо результатов

$ typings search rx-node
No results found for search

Как я могу определить определения пользовательского типа для установленного модуля npm rx-node? Где я должен хранить файл определения типа? Как настроить TypeScript (tsconfig.json и typings.json)?

Изменить: Благодаря Алексей Л. и Дэвид Бохунек Я достиг для определения a rx-node.d.ts, который выглядит следующим образом:

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

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

Я установил @reactivex/rxjs

npm install --save @reactivex/rxjs

Так как я получил ошибку

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

Я изменил цель в tsconfig.json на es6.

Ответ 1

Осторожно, это старый вопрос (2016 г.), касающийся управления определениями с использованием типизаций, который не рекомендуется использовать для прямой установки через npm


Вы можете добавить пользовательские определения в typings.json. Например, имея следующую структуру папок:

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

где rx-node.d.ts - ваш файл пользовательских текстов. Например:

declare module RxNode {
    export interface ...
}

Затем установите с помощью команды

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

Или вручную: в typings.json добавьте ссылку на этот файл:

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

И беги typings install

Ответ 2

Создайте новый файл, назвав его rx-node.d.ts и убедитесь, что он ссылается на ваш tsconfig.json напрямую или из другого файла, например typings/index.d.ts. Затем вы можете начать с чего-то вроде этого:

///<reference path="rx.d.ts" />

declare namespace RxNode  {

    export interface Emitter<T>{

    }

    export function toEventEmitter<T>(observable: Rx.Observable<T>, eventName: string): Emitter<T>;
}

Этот вопрос/ответ может быть полезным: Как записать файл d.ts из существующего .js файла?

Если вы создаете хороший файл описания типизированных качеств, внесите вклад в https://github.com/DefinitelyTyped/DefinitelyTyped