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
- 核心に近づく