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