[TypeScript] コンソール作成

Node.jsでは実行時に渡される引数の情報はprocess.argvにまとめられている
process.argv[0] = nodeコマンドのパス
process.argv[1] = スクリプトファイルのパス
process.argv[2]以降 = コマンド実行時に渡される引数

src/index.ts

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
console.log("Node path = " + process.argv[0])
console.log("Script file path = " + process.argv[1])
 
const data: number[] = []
for(var i = 2; i < process.argv.length; i++){
    data.push(Number(process.argv[i]))
}
console.log(data)
 
for (let item of data){
    const res = primeFactor(item)
    console.log(item + '= ' + res)
}
 
function primeFactor(a: number): number[] {
    const v: number[ ] = []
    let x = a
    let n = 2
    while(x > n){
      if(x % n == 0){
        x = x / n
        v.push(n)
      } else {
        n += n == 2 ? 1 : 2
      }
    }
    v.push(x)
    return v
}

$ npm run build
$ node dist/main.js 100 1234 9876
Node path = /usr/bin/node
Script file path = /home/vagrant/dev/hands-on/dist/main.js
[ 100, 1234, 9876 ]
100= 2,2,5,5
1234= 2,617
9876= 2,2,3,823

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
console.log("Node path = " + process.argv[0])
console.log("Script file path = " + process.argv[1])
 
const data: number[] = []
for(var i = 2; i < process.argv.length; i++){
    data.push(Number(process.argv[i]))
}
console.log('parameters: ' + data)
 
const f = aggregate()
 
 
for (let item of data){
    const res = f(item)
    console.log(res)
}
 
function aggregate(): (n:number) => [number, number, number, number, number] {
    let total = 0
    let totalp = 0
    let totalt = 0
    return (n:number):[number, number, number, number, number] => {
        total += n
        let tax = Math.floor(n - n / 1.1)
        totalp += n - tax
        totalt += tax
        return [n, tax, total, totalp, totalt]
    }
}

$ node dist/main.js 1200 1870 3058 2765 1875
Node path = /usr/bin/node
Script file path = /home/vagrant/dev/hands-on/dist/main.js
parameters: 1200,1870,3058,2765,1875
[ 1200, 109, 1200, 1091, 109 ]
[ 1870, 170, 3070, 2791, 279 ]
[ 3058, 278, 6128, 5571, 557 ]
[ 2765, 251, 8893, 8085, 808 ]
[ 1875, 170, 10768, 9790, 978 ]

なるほど、ここまでの知識を使って何か作ってみたいですね