More Related Content
Similar to JavaScript使いのためのTypeScript実践入門 (20)
More from Shumpei Shiraishi (20)
JavaScript使いのためのTypeScript実践入門
- 10. ES.nextな部分を試してみる:
変数
• letやconstが使えます。
– let: スコープが {...} に限定された変数の定義
• varは、関数スコープしか持たない
– const: 再代入不可のlet
• 正直、varの出番はもうありません
– ぼくらは、「基本const、たまにlet」というルールでやっ
てます
let a ='Hello';
const b = 'World';
b = 'Error'; // 再代入不可
- 12. ES.nextな部分を試してみる:
配列
• spread演算子
– 配列の中身をいい感じに展開
• for...of
– 配列(正確にはイテレータ)をループ処理
let a ='Hello';
const b = 'World';
const c = `${a}, ${b}`;
const d = [a, b];
const e = [1, 2, ...d]; // [1, 2, 'Hello', 'World']
e.push(...d); // [1,2,'Hello','World','Hello','World']
for (let f of e)
console.log(f); // 1, 2, Hello, World
- 13. ES.nextな部分を試してみる:
オブジェクトリテラル
• Property Shorthand
– 変数名と同名のプロパティを簡単に定義
– {a: a} みたいなのを {a} で宣言できる
– 個人的には異様に便利
• Computed PropertyNames
– {[式]: 値} とすることで、プロパティ名に式を使用できる
• Method properties
– オブジェクトのメンバーに関数を指定するのが楽になった
let a ='Hello';
const b = 'World';
const c = {a, b}; // {a: Hello, b: World}
const d = {[a]: a}; // {Hello: Hello}
const f = {
method() {}
};
- 15. ES.nextな部分を試してみる:
関数1
• アロー関数
– ( ) => { 関数本体 } という形式で関数定義可能
– 関数本体が単一の式な場合、中括弧を省略可能
• デフォルト引数
– 関数の仮引数に「= デフォルト値」と指定することで、
引数のデフォルト値を指定可能
const sum = (a = 0, b = 0) => { return a + b; };
// 上と同義
// const sum = (a = 0, b = 0) => a + b;
- 16. ES.nextな部分を試してみる:
関数2
• Rest Parameter
– 関数の最後の仮引数を「...仮引数名」とすること
で、可変長引数を配列として扱うことが可能
• Spread Operator
– 「...配列」とすることで、配列を関数の引数に展
開できる
// 可変長引数を取る関数
const join = (s, ...rest) => [s, ...rest].join(' ');
let s = ['Wor', 'ld'];
// 配列を引数に展開
join('Hello,', ...s);
- 19. ES.nextな部分を試してみる:
async/await
• Promiseベースの非同期なコードを、あたかも同期的なコードであるかのように記述できるようになる
– 処理は依然として非同期なので、並列度が下がることもない
– 一度使うとやめられないくらい便利。
• asyncキーワードは関数に指定する。
– 指定した関数内ではawaitを使える
– async関数の戻り値はPromiseとなる
• awaitキーワードは、Promiseを返す関数呼び出しの前に付与する
– Promiseを返す関数の結果を戻り値として受け取れる。
– エラーをtry-catchできる。
• TypeScriptのコンパイルターゲットをES6にしないと使えない(Promiseやyieldが必要なので)
// 指定したミリ秒待つ関数
function waitFor(millis): Promise<void> {
return new Promise(resolve => setTimeout(resolve, millis));
}
// 非同期関数
async function hello(seconds) {
try {
// awaitで、Promiseの終了を待ち合わせ
await waitFor(seconds * 1000);
alert('Hello');
} catch (e) {}
}
hello(3); // 3秒後に「Hello」が表示される
- 22. 型+αを試してみる:
型定義、型推論、ダックタイピング
• 無名の型を簡単に宣言できる
• ダックタイピング
– 「もしもそれがアヒルのように歩き、アヒルのように鳴く
のなら、それはアヒルである」
– 宣言された型とは無関係のオブジェクトでも、インター
フェースが一致していれば同じ型だとみなされる
// 無名の型をアドホックに宣言
function hello(person: {name: string}): void {
alert(`Hello, ${person.name}`);
}
// 上の型と一致するオブジェクトを引数に指定
hello({name: 'shiraishi'});
- 24. 型+αを試してみる:
クラス
• アクセス修飾子
– private: そのクラス内でのみ利用可能
– protected: そのクラス、もしくは子クラスから利用可能
– public: あらゆる場所から利用可能
• コンストラクタでのプロパティ指定
– コンストラクタの仮引数に、アクセス修飾子をつけると、
クラスのプロパティ宣言を省略できる
class Greeter {
constructor(private greeting: string) {
}
greet() {
return "Hello, " + this.greeting;
}
}
- 34. モジュールバンドラー
• TechFeedではWebpackを選択
– 実績豊富
– React界隈でのデファクト
– なんでもできそう
– 既に下調べが済んでいた
• その他の選択肢について
– Browserify…最古参
– System.js
• 現在のところAngular2公式?
• 後発なため情報が少なめ
• JSPMも組み合わせる必要あり?
• 参考文献
– http://webpack.github.io/docs/comparison.html
– http://ilikekillnerds.com/2015/07/jspm-vs-webpack/