Programming TypeScript ch1-2

TypeScript勉強メモ

出典: 


Introduction

  • 型安全

    • using types to prevent programs from doing invalid things.
  • invalidってなに

    • numberとリストの掛け算とか
  • 実行する前に、テストする前にわかるのが強い

TypeScript: A 10,000 Foot View

The Compiler

  • プログラミング言語の一般論

    • コンパイラの仕事
    • ソースコードファイル -> AST: Abstract Syntax Tree
    • AST -> バイトコード
    • 【所感】ASTを作るのはレキサとパーサな気がするぞ
    • バイトコードをランタイムに入力して評価させることで所望の結果を得る
  • TS独特なところ

    • バイトコードではなくJSコードを出力する
    • AST生成後、JSコード出力前に型検査を行う
  • TSのAST -> JSコードの変換時には型情報は使われない

The Type System

  • 型システムは2つに大別される

    • 明示
    • 推論
  • これらはトレードオフ
  • TSは両方にインスパイアされている

    • 明示もできるし推論させることもできる
  • 型の明示は最小限にしたほうがいい

TypeScript Versus JavaScript

How are types bound?

  • TS: gradually typed language (漸進的型付け)
  • 全てが静的に型付けされていなくてもコンパイルが通る

    • 型が与えられていない部分では間違いを見逃すことがある
  • レガシーなJSコードからTSに漸進的に移行するときに有用
  • ただし、そうでないならば型カバレッジ100%を目指すべき

Are types automatically converted?

  • 明示的に変換せよ

When are types checked?

  • 実行前、コンパイル時に間違いがわかる
  • 実装・修正のフィードバックループが劇的に速くなる

when are errors surfaced?

  • コンパイル時エラー

    • 型エラー、シンタックスエラー
  • 実行時エラー

    • スタックオーバーフロー
    • ネットワークコネクションエラー
    • ユーザー入力不正
  • 全部実行時エラーなpure JSより良い

Code Editor Setup

npm init -y
npm install --save-dev typescript tslint @types/node

tsconfig.json

  • 雛形tsconfig.json生成できたりする
npx tsc --init
  • 今回はこうする
{
  "compilerOptions": {
    "lib": ["es2015"],
    "module": "commonjs",
    "outDir": "dist",
    "sourceMap": true,
    "strict": true,
    "target": "es2015"
  },
  "include": [
    "src"
  ]
}
  • ブラウザならlib"dom"を追加したりする

tslint.json

  • 雛形生成
npx tslint --init
{
    "defaultSeverity": "error",
    "extends": [
        "tslint:recommended"
    ],
    "jsRules": {},
    "rules": {},
    "rulesDirectory": []
}
  • 今回はこうしてみる
{
  "defaultSeverity": "error",
  "extends": [
    "tslint:recommended"
  ],
  "rules": {
    "semicolon": [true, "never"],
    "trailing-comma": [true, "always"]
  }
}
npx tslint -c tslint.json './src/**/*.ts'

index.ts

console.log('Hello TypeScript!')
npx tsc
node ./dist/index.js
Hello TypeScript!

shortcuts

  • ts-node でTSを直接実行
  • typescript-node-starter でスキャフォールディング

英語

  • feed up

    • うんざりする
  • getting warm

    • 核心に近づく