配置 npm 淘宝源npm config set registry https://registry.npm.taobao.org/如果后悔了,想撤销淘宝源就运行npm config delete registry在命令行运行ts文件首先需要安装ts,ts-nodenpm install typescript -gnpm install ts-node -g新建1.ts文件,写上这两句话#!/usr/bin/env ts-nodeconsole.log(‘hello world’)添加可执行权限(windows 用户可直接执行第 3 步)chmod +x 1.ts 在命令行中执行1.ts文件./1.ts就可以看到终端中输出hello world接收命令行参数将hello world改成process.argy:#!/usr/bin/env ts-nodeconsole.log(process.argv)如果没有配置好TS,那么运行./1.ts 上面代码会出现如下报错:/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 -ynpm install @types/node再次运行1.ts,就会在终端上看到[ ‘/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-nodeconst 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-nodeconst 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-nodeconst 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-nodeclass 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) //最高的层级的调用输出:张三—-张四——–张四一——–张四二—-张五——–张五一——–张五二