web-dev-qa-db-fra.com

TypeScript: comment définir des typages personnalisés pour le package npm installé?

J'aime utiliser rx-node dans TypeScript

import RxNode from 'rx-node';

J'ai installé rx-node en utilisant npm

$ npm install rx-node --save

J'ai cherché des définitions de types, mais sans résultat

$ typings search rx-node
No results found for search

Comment puis-je définir des définitions de type personnalisées pour le module npm installé rx-node ? Où dois-je stocker le fichier de définition de type? Comment configurer TypeScript ( tsconfig.json et typings.json)?

Edit: Merci à Aleksey L. et David Bohunek J'ai réussi à définir un rx-node.d.ts qui ressemble à ceci

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

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

J'ai installé @ reactivex/rxjs

npm install --save @reactivex/rxjs

Depuis que j'ai une erreur

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

J'ai changé la cible dans tsconfig.json en es6.

32
maiermic

Attention, c'est une vieille question (2016) concernant la gestion des définitions en utilisant typages qui est déconseillée au profit de leur installation directement via npm


Vous pouvez ajouter des définitions personnalisées à typings.json . Par exemple, avoir la structure de dossiers suivante:

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

où rx-node.d.ts est votre fichier de saisie personnalisé. Par exemple:

declare module RxNode {
    export interface ...
}

Puis installez avec une commande

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

Ou manuellement: dans typings.json ajoutez une référence à ce fichier de typage:

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

Et courir typings install

33
Aleksey L.

Créez un nouveau fichier, appelé rx-node.d.ts et assurez-vous qu'il est référencé dans votre tsconfig.json soit directement, soit à partir d'un autre fichier, par exemple typings/index.d.ts. Ensuite, vous pouvez commencer avec quelque chose comme ceci:

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

declare namespace RxNode  {

    export interface Emitter<T>{

    }

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

Cette question/réponse peut être utile: Comment écrire un fichier d.ts à partir d'un fichier .js existant?

Si vous créez un fichier de définition de typages de Nice et de haute qualité, contribuez à https://github.com/DefinitelyTyped/DefinitelyTyped

1
David Bohunek