Entrada de consola en TypeScript
¿Cómo recibo una entrada de consola de un usuario en TypeScript?
Por ejemplo, en Python yo usaría:
userInput = input("Enter name: ")
¿Cuál es el equivalente en TypeScript?
Respuesta #1
Puedes usar el módulo de nodo readline. Consulta readline en la documentación de node.
Para importar readline en TypeScript, utiliza el carácter asterisco (*). Por ejemplo:
import * as readline from 'readline';
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.question('Is this example useful? [y/n] ', (answer) => {
switch(answer.toLowerCase()) {
case 'y':
console.log('Super!');
break;
case 'n':
console.log('Sorry! :(');
break;
default:
console.log('Invalid answer!');
}
rl.close();
});
También puedes usar la API de promesas de readline (async/await):
import * as readline from 'readline/promises';
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
try {
// NOTE: the second parameter (the timeout) is optional.
const answer = await rl.question('Is this example useful? [y/n] ', {
signal: AbortSignal.timeout(10_000) // 10s timeout
});
switch(answer.toLowerCase()) {
case 'y':
console.log('Super!');
break;
case 'n':
console.log('Sorry! :(');
break;
default:
console.log('Invalid answer!');
}
} finally {
rl.close();
}
Nota: el tiempo de espera es opcional (por ejemplo, await rl.question('...')).
Respuesta #2
En el navegador, usarías un aviso:
var userInput = prompt('Please enter your name.');
En Node puedes usar Readline:
var readline = require('readline');
var rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.question("What do you think of Node.js? ", function(answer) {
console.log("Thank you for your valuable feedback:", answer);
rl.close();
});
Respuesta #3
TypeScript solo agrega tipado estático opcional y capacidades de transpilación a JavaScript. Es un artefacto puramente de tiempo de compilación; en tiempo de ejecución, no hay TypeScript, por lo que esta pregunta trata sobre JavaScript, no sobre TypeScript.
Si estás hablando de aceptar entradas desde la consola, probablemente estés hablando de una aplicación node.js. En Leer valores desde la consola, de manera interactiva, la solución es usar stdin:
var stdin = process.openStdin();
stdin.addListener("data", function(d) {
// note: d is an object, and when converted to a string it will
// end with a linefeed. so we (rather crudely) account for that
// with toString() and then substring()
console.log("you entered: [" + d.toString().trim() + "]");
});
