はじめに
こんにちは。
福岡は昨日から急に寒くなりました・・
早く暖かくなって欲しいです 🌸
最近個人でAngular
の勉強を始めました!!
Angular
ではTypeScript
を使う必要があるため、
TypeScript
について勉強するきっかけになりました。
ということで、今回は、TypeScript
についてまとめた内容を紹介したいと思います!
TypeScript とは
- MS と Google が協業で開発。
TypeScript
は、新しい言語ではなく、ES6 のスーパーセット。TypeScript
コードは、ES6 コードと 100%互換。
👇 以下の図みたいな感じ。
インストール方法
インストール方法は、すごく簡単。
npm install -g typescript
TypeScript を使うメリット
TypeScript
のメリットは以下です!
- タイプ
- クラス
- デコレータ
- インポート
- 言語ユーティリティー
タイプ
ES5 から改善された点がいくつかありますが、まず 1 つ目は「タイプが指定できること」です。
タイプ指定に対応していない JavaScript を好む方も一部いると思いますが、
タイプを指定できることによって、いろんなメリットが生まれます。
- コードを”作成する時”に、バグを減らすことができる(コンパイルエラーになるため)
- コードを”読む時”に、コードを書いた人の意図がはっきり分かる
もちろんTypeScript
でタイプを指定しないことも可能です。
例えば、サンプルコードを書いてみたりする時には、タイプを省略し、後から指定することもできます。
タイプ指定の例
変数
var name: string;
関数
関数を宣言する時も、次のようにパラメーターとリターンどちらもタイプを指定できます。
function sample(name: string): string {
return 'Hello' + name;
}
タイプの種類
- string
- number
- boolean
- Array
- 列挙型
- any
- void
それでは、タイプの種類を一つずつ見ていきましょう!
1. string
文字列は、string
タイプで宣言します。
var name: string = 'jslee';
2. number
言葉通り”数字”を表すタイプ。
var age: number = 26;
3. boolean
true / false
var married: boolean = true;
4. Array
配列タイプです。
配列はコレクションなので、配列の中でもオブジェクトのタイプを指定する必要があります。
var languages: Array<string> = ['PHP', 'golang', 'JavaScript'];
var languages: string[] = ['PHP', 'golang', 'JavaScript'];
number
も一緒です。
var hogehoge: Array<number> = [1, 2, 3];
var hogehoge: number[] = [1, 2, 3];
5. 列挙型
列挙型は、enum
を使います!
enum Role {Employee, Manager, Admin};
var role: Role = Role.Admin;
列挙型のデフォルト値は0
ですが、
次のように指定することもできます。
enum Role {Employee = 3, Manager, Admin};
/*この場合、列挙型の値は「3」から始まります。
なので、「Manager=4」,「Admin=5」になります。*/
var role: Role = Role.Admin;
もちろん、項目毎に指定することも可能!
enum Role {Employee = 3, Manager = 5, Admin = 7};
var role: Role = Role.Admin;
指定した値を使う時は
enum Role {Employee = 3, Manager = 5, Admin = 7};
console.log('Roles: ', Role[3], ',', Role[5], 'and', Role[7]);
6. any
any
は、変数のタイプを省略する時に、デフォルトで指定されるタイプです。
any
タイプの変数は、どんな値も受け取ることができます!
var something: any = 'string';
something = 1;
something = [1, 2, 3];
7. void
void
は、“タイプが無い”という意味です。
一般的にリターン値がない関数で使うことが多いですね。
function setName(name: String) void {
this.fullName = name;
}
クラス
ES5 では、クラスの代わりに「プロトタイプ」が使われましたが、
ES6 では、JavaScript
にクラスが導入されました!
class sampleClass {}
クラスには、プロパティとメソッド、コンストラクタを持たせます。
プロパティ
プロパティは、クラスのインスタンスに属するデータを定義します!
class Person {
firtName: string;
lastName: string;
age: number;
}
メソッド
class Person {
name: string;
age: number;
greet() {
console.log('Hello', this.name);
}
}
// Personタイプの変数を宣言、インスタンス生成
var p: Person = new Person();
p.name = 'jslee';
// メソッドを呼び出す
p.greet();
コンストラクタ
コンストラクタ(constructor)は、皆さんもご存知の通りインスタンスが生成される時に実行されるメソッドですね。
コンストラクタは、以下のルールを持ってます!
- 名前は、必ず
constructor
にする。 - パラメータはあってもなくても良いが、値はリターンしない。
- コンストラクタを指定していない場合は、自動で作られる。
class sampleClass {
constructor() {
// 処理
}
}
継承(Inheritance)
extends
キーワードを使って、継承します!
class sampleClass extends parentClass {
constructor() {
// 処理
}
}
ユーティリティー
ES6, TypeScript は、プログラミングをもっと楽しめる多くの文法構造を提供してます!
その中でも、以下の二つを紹介します。
- アロー関数
- テンプレート文字列
アロー関数
アロー関数(=>)は、関数を作成するための縮約形表記です。
ES5 での例
var languages = ['PHP', 'TypeScript', 'C++'];
languages.forEach(function (language) {
console.log(language);
});
アロー(=>)関数の書き方
var languages: string[] = ['PHP', 'TypeScript', 'C++'];
languages.forEach(language => {
console.log(language);
});
アロー(=>)は、this を共有できる
// ES5
var hoge = {
name: 'jslee',
languages: ['PHP', 'TypeScript', 'C++'],
print: function () {
var self = this;
this.languages.forEach(function (language) {
// this.nameは定義されてないので、self.nameを使う必要がある。
console.log(self.name + 'が' + language + 'でコードを書いとる');
});
}
};
// ES6, TypeScript - thisを共有するため、以下のように作成できる
var hoge = {
name: 'jslee',
languages: ['PHP', 'TypeScript', 'C++'],
print: function () {
this.languages.forEach(language => {
console.log(this.name + 'が' + language + 'でコードを書いとる');
});
}
};
テンプレート文字列
ES6, TypeScript では、新しいテンプレート文字列が導入されました!
- 文字列中に変数( +でつなぐ必要がなくなった )
- 多行(multi-line)文字列
文字列中に変数(string interpolation)
文字列の中に変数を使うことができるのがコツ。
var firstName = 'js';
var lastName = 'lee';
var greeting = `Hello ${firstName} ${$lastName}`;
console.log(greeting);
多行文字列(multi-line)
多行文字列(multi-line)機能は、長い文字列をコードに書く時に役に立ちそうです!
テンプレートのように使えるっていうのが良さそうですね。
var template = `
<div>
<h1>HogeHoge</h1>
<p>jslee</p>
</div>
`;
まとめ
少々長くなりましたが、ざっくりこんな感じです!
また追加したい内容があったら、追記していきます 👍
以上!