TypeScript
×
Chrome Extension
五十嵐 雄
概要
TypeScriptとは
-
Microsoft製の静的型付き言語
-
コンパイル → Javascript
-
ES5のスーパーセット
-
フロントでもサーバーでもOK
-
型定義ファイルを include して外部モジュールも型の世界へ引き込める
Chrome Extension について
-
だいたいWebページと同じ
-
ポップアップ → popup.html
-
オプション → options.html
-
ユーザーの入力をフォームで受ける
-
専用ストレージのデータを操作したり
環境
今回のビルドツール
-
gulp
- gulp watch
- gulp test
- ……トップレベルのコマンドを定義
-
webpack + ts-loader
- browserifyをちょっとリッチにした感じのツール
- TypeScript → Javascript の部分を担当
- gulp から使う
-
typings
- 型定義ファイルを管理するツール
使い方
$ npm install
ライブラリが全部入る
$ ./node_modules/.bin/typings install
型定義ファイルが ./typings/ 以下にインストールされる
$ gulp watch
変更を監視して差分コンパイルを続ける.コーディング開始!!
まあまあ良さがある
詳しくは GitHub yu-i9/HoogleSwitcher
TypeScript
『TypeScript playground』
でググるとインタープリタが出てきます
基本の型
var num: number = 1;
var boolArray1: boolean[] = [true, false];
var boolArray2: Array<boolean> = [true, false];
function numToString(num: number): string {
return num.toString();
}
var printAny: (obj: any) => void;
printAny = function printAny(obj) {
console.log(obj);
}
インターフェース
interface Animal {
name: string;
}
function displayName(animal: Animal){
alert(animal.name);
}
// Error
displayName({});
// OK
displayName({name: "cat", color: "black"});
// OK!
displayName({name: "cat"});
クラス
class Animal {
name: string;
constructor(name: string) {
this.name = name;
}
displayName(): void {
console.log(this.name);
}
}
var cat: Animal = new Animal("cat");
cat.displayName(); // "cat"
インターフェースをクラスで実装する
interface AnimalInterface {
name: string;
}
class Animal implements AnimalInterface {
name: string;
constructor(name: string) {
this.name = name;
}
}
Generic
function identity<T>(arg: T): T {
return arg;
}
// OK!
var v1 = identity<number>(1);
// OK!
var v2 = identity(1);
まとめ
良さ
-
同じモデルを複数のページから操作する
- モジュール化のうまみ
- インターフェースを型で定めるうまみ
-
型を「つけてもよい」
- 失うものがほとんどない(ES5ならそのまま通る)
- Gradualのうまみ
注意点
-
環境構築がとにかくダルい
- ただでさえ流れの速いJSの環境構築界隈
- TypeScriptは情報が少ないほう
-
コンパイルが通っても安心しない
- 型注釈が無かったりスコープで死んだり
- あくまで Javascript だと思って書くべき
typescript
By Yuu Igarashi
typescript
- 1,798