npm config set registry https://registry.npm.taobao.org/
若是後悔了,想撤銷淘寶源就運行npm config delete registry
node
ts
文件首先須要安裝ts
,ts-node
typescript
npm install typescript -g npm install ts-node -g
新建1.ts
文件,寫上這兩句話npm
#!/usr/bin/env ts-node console.log('hello world')
添加可執行權限(windows 用戶可直接執行第 3 步)windows
chmod +x 1.ts
在命令行中執行1.ts
文件數組
./1.ts
hello world
將hello world
改爲process.argy
:ui
#!/usr/bin/env ts-node console.log(process.argv)
若是沒有配置好TS
,那麼運行./1.ts
上面代碼會出現以下報錯:this
/usr/local/lib/node_modules/ts-node/src/index.ts:226 return new TSError(diagnosticText, diagnosticCodes) ^ TSError: ⨯ Unable to compile TypeScript: 1.ts:2:13 - error TS2580: Cannot find name 'process'. Do you need to install type definitions for node? Try `npm i @types/node`. 2 console.log(process.argv)
at createTSError (/usr/local/lib/node_modules/ts-node/src/index.ts:226:12) at getOutput (/usr/local/lib/node_modules/ts-node/src/index.ts:335:40) at Object.compile (/usr/local/lib/node_modules/ts-node/src/index.ts:368:11) at Module.m._compile (/usr/local/lib/node_modules/ts-node/src/index.ts:414:43) at Module._extensions..js (internal/modules/cjs/loader.js:745:10) at Object.require.extensions.(anonymous function) [as .ts] (/usr/local/lib/node_modules/ts-node/src/index.ts:417:12) at Module.load (internal/modules/cjs/loader.js:626:32) at tryModuleLoad (internal/modules/cjs/loader.js:566:12) at Function.Module._load (internal/modules/cjs/loader.js:558:3) at Function.Module.runMain (internal/modules/cjs/loader.js:797:12)
根據上面的提示,須要安裝types/node
,因此具體步驟以下:命令行
npm init -y npm install @types/node
再次運行1.ts
,就會在終端上看到code
[ '/usr/local/bin/ts-node', '/Users/mac/Desktop/ts/demo/1.ts' ]
在1.ts
後面接上參數運行遞歸
1.ts 2 5
終端上會顯示
[ '/usr/local/bin/ts-node', '/Users/mac/Desktop/ts/demo/1.ts', '2', '5']
如今已經可以接受命令行的參數了,如何用接受的參數作四則運算?
#!/usr/bin/env ts-node const num1 = parseInt(process.argv[2]) const num2 = parseInt(process.argv[3]) console.log(num1 + num2)
在命令行中執行下面命令,會獲得8
./1.ts 3 5
可是如今還不能處理,非數字參數,會獲得NaN
./1.ts 3 s
作一個判斷,若是不是數字就退出
#!/usr/bin/env ts-node const num1: number = parseInt(process.argv[2]) const num2: number = parseInt(process.argv[3]) console.log(num1 + num2) if (Number.isNaN(num1) || Number.isNaN(num2)) { console.log('輸入有誤') return } console.log(num1 + num2)
return
是不能用在頂層做用域中的,因此這裏應該使用process.exit(N)
,其中的N
是返回值。
#!/usr/bin/env ts-node const num1: number = parseInt(process.argv[2]) const num2: number = parseInt(process.argv[3]) console.log(num1 + num2) if (Number.isNaN(num1) || Number.isNaN(num2)) { console.log('輸入有誤') process.exit(1) } console.log(num1 + num2) process.exit(0)
#!/usr/bin/env ts-node class Person { public children: Person[] = [] //children 是個數組,裏面每一項都必須是 Person,用 public 能夠聲明一個屬性;必需要初始化,否下面 push 用不了 constructor (public name: string){} // 能夠聲明一個 name 屬性 addChild(child: Person): void { this.children.push(child) } introduceFamily (n?: number): void { //? 是可選參數 n = n || 1 console.log(`${'----'.repeat(n - 1)}${this.name}`) //repeat,重複 this.children.forEach(child => { child.introduceFamily(n + 1) // 遞歸 }) } } let grandpa = new Person('張三') let child1 = new Person('張四') let child2 = new Person('張五') let child11 = new Person('張四一') let child12 = new Person('張四二') let child21 = new Person('張五一') let child22 = new Person('張五二') grandpa.addChild(child1) // 往 children 中添加 孩子 時,必須用先 實例化,不能直接添加 grandpa.addChild(child2) child1.addChild(child11) child1.addChild(child12) child2.addChild(child21) child2.addChild(child22) grandpa.introduceFamily(1) //最高的層級的調用
輸出:
張三 ----張四 --------張四一 --------張四二 ----張五 --------張五一 --------張五二