在命令行中執行 ts

配置 npm 淘寶源

npm config set registry https://registry.npm.taobao.org/

若是後悔了,想撤銷淘寶源就運行npm config delete registrynode

在命令行運行ts文件

首先須要安裝tsts-nodetypescript

npm install typescript -g
npm install ts-node -g
  1. 新建1.ts文件,寫上這兩句話npm

    #!/usr/bin/env ts-node
    console.log('hello world')
  2. 添加可執行權限(windows 用戶可直接執行第 3 步)windows

    chmod +x 1.ts
  3. 在命令行中執行1.ts文件數組

    ./1.ts
  4. 就能夠看到終端中輸出hello world

接收命令行參數

  1. hello world改爲process.argyui

    #!/usr/bin/env ts-node
    console.log(process.argv)
  2. 若是沒有配置好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)
  3. 根據上面的提示,須要安裝types/node,因此具體步驟以下:命令行

    npm init -y
    npm install @types/node
  4. 再次運行1.ts,就會在終端上看到code

    [ '/usr/local/bin/ts-node', '/Users/mac/Desktop/ts/demo/1.ts' ]
  5. 1.ts後面接上參數運行遞歸

    1.ts 2 5
  6. 終端上會顯示

    [ '/usr/local/bin/ts-node', '/Users/mac/Desktop/ts/demo/1.ts', '2', '5']

四則運算

  1. 如今已經可以接受命令行的參數了,如何用接受的參數作四則運算?

    #!/usr/bin/env ts-node
    const num1 = parseInt(process.argv[2])
    const num2 = parseInt(process.argv[3])
    console.log(num1 + num2)
  2. 在命令行中執行下面命令,會獲得8

    ./1.ts 3 5
  3. 可是如今還不能處理,非數字參數,會獲得NaN

    ./1.ts 3 s
  4. 作一個判斷,若是不是數字就退出

    #!/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)
  5. 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)      //最高的層級的調用

輸出:

張三
----張四
--------張四一
--------張四二
----張五
--------張五一
--------張五二
相關文章
相關標籤/搜索