2017-09-13 8 views
1

Je travaille sur un petit projet en TypeScript avec tsc -v 2.4.2 et Node v6.10.3. Je voudrais capturer des touches dans la CLI, donc j'ai essayé de import * as readline from 'readline' et ensuite utiliser readline.emitKeyPressEvents(process.stdin), mais il se plaint que the property emitKeyPressEvents is not found on typeof readline.TypeScript + propriété NodeJS readline manquante

J'ai également fait npm install --save @types/node.

est ici un M (N) WE:

import * as readline from "readline"; 
import {SIGINT} from "constants"; 

export class InputManager 
{ 
    private _currentStates: Array<IKeyEntity>; 
    private _oldStates: Array<IKeyEntity>; 

    public constructor() 
    { 
     // Throws error, won't compile 
     readline.emitKeyPressEvents(process.stdin); 
    } 

    public handleInput() 
    { 
     if (process.stdin.isTTY) 
      process.stdin.setRawMode(true); 

     process.stdin.on('keypress', (str: string, key: any) => { 
      process.stdout.write('Handling keypress ['+str+']'); 

      if (key && key.ctrl && (key.name == 'c' || key.name == 'l')) 
      { 
       process.kill(process.pid, SIGINT); 
      } 
     }); 
    } 
} 

Répondre

2

La méthode manque en effet des node typages. Son nom correct est actuellement emitKeypressEvents (avec un minuscule p), mais celui-ci est également manquant. Je suppose que c'est un simple oubli, donc j'ai soumis un PR avec l'ajout de DefinitelyTyped. Cela peut prendre un certain temps pour traiter (environ une semaine, si tout va bien), mais en attendant vous pouvez saisir vérifier votre code en ajoutant une déclaration locale au fichier contenant InputManager:

declare module 'readline' { 
    export function emitKeypressEvents(stream: NodeJS.ReadableStream, interface?: ReadLine): void; 
} 
+0

Il a fallu un peu plus long que d'habitude, mais '@ types/node @ 8.0.36', publié aujourd'hui, inclut' emitKeypressEvents'. – Oblosys