TypeScript 入門: 構文集

こんにちは @jedipunkz です。 TypeScript の学習を進める中で構文を網羅的に理解する必要性を感じてサンプルコード作成を作成し動作確認した上で構文集を作成しました。この記事では TypeScript の主要な構文をまとめたいと思います。 ※ 気が向いたときに新しい構文が出てきた際に更新し続ける記事にしようと思っています。 目次 1. 基本的な型システム プリミティブ型 型注釈と型推論 TypeScript 拡張型 リテラル型 型アサーション 2. 複合型 配列とタプル オブジェクト型 ユニオン型とインターセクション型 列挙型 Discriminated Unions 3. 関数 関数の型定義 関数のオーバーロード 4. インターフェース 基本的なインターフェース インターフェースの継承 5. クラス クラスの基本 アクセス修飾子 継承と抽象クラス 6. ジェネリクス ジェネリクスの基本 型制約とユーティリティ型 7. 型エイリアス 8. モジュール エクスポートとインポート 9. 高度な型機能 型ガード 高度な型演算子 インデックスシグネチャ ユーティリティ型の拡張 Mapped Types 条件付き型 10. 高度な機能 デコレーター 名前空間 基本的な型システム プリミティブ型 プリミティブ型は JavaScript の基本的なデータ型です。TypeScript ではこれらに型注釈を付けることで型安全性を確保できます。 boolean 型 - 真偽値を表します。true または false のいずれかの値を持ちます。 number 型 - 数値を表します。整数・小数・16 進数・2 進数・8 進数すべてこの型で扱います。JavaScript と同様に内部的にはすべて浮動小数点数として扱われます。 string 型 - 文字列を表します。ダブルクォート、シングルクォート、バッククォート(テンプレートリテラル)で記述できます。 null 型と undefined 型 - 値が存在しないことを表します。null は明示的に値がないことを示し、undefined は値が未定義であることを示します。 bigint 型 - Number.MAX_SAFE_INTEGER を超える大きな整数を扱えます。末尾に n を付けて記述します。 symbol 型 - 一意で不変の値を作成します。オブジェクトのプロパティキーとして使用されることが多いです。 // 基本的な型 const dogName: string = "Buddy"; const dogAge: number = 3; const isDogHungry: boolean = true; console.log(dogName); // 出力: Buddy console.log(dogAge); // 出力: 3 console.log(isDogHungry); // 出力: true // null と undefined const location: null = null; let age: undefined = undefined; console.log(location); // 出力: null console.log(age); // 出力: undefined // bigint と symbol const weight: bigint = 9007199254740991n; const id: symbol = Symbol("unique"); console.log(weight); // 出力: 9007199254740991n console.log(id); // 出力: Symbol(unique) 型注釈と型推論 型注釈 (Type Annotation) は変数や関数に明示的に型を指定する機能です。: 型名 の形式で記述します。型注釈によりその変数や関数が扱える値の種類を明確にできます。 ...

Aviator でモダンに OpenStack を操作する

こんにちは。@jedipunkz です。 自分は Ruby を普段使うのでいつも Fog というライブラリを使って OpenStack, AWS を操作していました。Fog を使うとクラウドの操作が Ruby のネイティブコードで行え るのでシステムコマンド打つよりミス無く済みます。 Fog より後発で Aviator というライブラリが登場してきたので少し使ってみたのです がまだ未完成なところがあるものの便利な点もあって今後に期待だったので紹介します。 認証情報を yaml ファイルに記す 接続に必要な認証情報を yaml ファイルで記述します。名前を ‘aviator.yml’ として 保存。この時に下記のように環境毎に認証情報を別けて書くことができます。こうする ことでコードの中で開発用・サービス用等と使い分けられます。 production: provider: openstack auth_service: name: identity host_uri: <Auth URL> request: create_token validator: list_tenants auth_credentials: username: <User Name> password: <Password> tenant_name: <Tenant Name> development: provider: openstack auth_service: name: identity host_uri: <Auth URL> request: create_token validator: list_tenants auth_credentials: username: <User Name> password: <Password> tenant_name: <Tenant Name> シンタックス確認 +++ ...

Emacs + Mew で Gmail を読み書きする

こんにちは。@jedipunkz です。 今日も軽めの話題を。 Gmail を Emacs + Mew で読み書きする方法を何故かいつも忘れてしまうので自分のた めにもメモしておきます。Gmail はブラウザで読み書き出来るのに!と思われるかもし れませんが、Emacs で文章が書けるのは重要なことです。:D 対象 OS 比較的新しい… Debian Gnu/Linux Ubuntu を使います。 手順 Emacs, Mew, stunnel4 をインストールします。Emacs は好きな物を入れてください。 % sudo apt-get install emacs24-nox stunnel4 mew mew-bin ca-certificates openssl コマンドで mail.pem を生成します。生成したものを /etc/stunnel 配下に設 置します。 % openssl req -new -out mail.pem -keyout mail.pem -nodes -x509 -days 365 % sudo cp mail.pem /etc/stunnel/ stunnel はインストール直後、起動してくれないので ENABLE=1 に修正します。 % sudo ${EDITOR} /etc/default/stunnel4 ENABLE=1 # 0 -> 1 へ変更 stunenl.conf のサンプルを /etc/stunnel 配下に設置します。 ...

pry のススメ

OpenStack をコードで管理するためのフレームワークは幾つか存在するのだけど Ruby で記述出来る Fog が良い!と隣に座ってるアプリエンジニアが言うので僕も最近少し 触ってます。 Fog を使った OpenStack を管理するコードを書くことも大事なのだけど、Fog のコン トリビュートってことで幾つかの機能を付け足して (Quantum Router 周り) ってこと をやってました。まだ取り込まれてないけど。 その開発の中で pry の存在を教えてもらいその便利さに驚いたので少し説明します。 バリバリ開発系の人は既に知っているだろうけど、インフラ系エンジニアの僕にとって は感激モノでした。 pry は irb 代替な Ruby のインタラクティブシェルです。下記の URL から持ってこれ ます。 https://github.com/pry/pry シンタックスハイライトされたり json のレスポンスが綺麗に成形されたり irb 的に 使うだけでも便利なのだけど ‘?’ や ‘$’ でコードのシンタックスを確認したりコード 内容を確認したり出来るのがアツい! ちょうど今回追加した Fog の機能を使って説明していみます。 Fog のコードを require して OpenStack に接続するための情報を設定し OpenStack Quantum に接続します。これで準備完了。 [38] pry(main)> require '/home/jedipunkz/fog/lib/fog.rb' [49] pry(main)> @connection_hash = { [49] pry(main)* :openstack_username => 'demo', [49] pry(main)* :openstack_api_key => 'demo', [49] pry(main)* :openstack_tenant => 'service', [49] pry(main)* :openstack_auth_url => 'http://172.16.1.11:5000/v2.0/tokens', [49] pry(main)* :provider => 'OpenStack', [49] pry(main)* } [50] pry(main)> @quantum = Fog::Network.new(@connection_hash) 試しに Router 一覧を取得します。list_routers メソッドです。 ...

Spiceweasel で knife バッチ処理

Spiceweasel https://github.com/mattray/spiceweasel#cookbooks を使ってみた。 Spiceweasel は Chef の cookbook のダウンロード, role/cookbook の chef server へのアップロード, ブートストラップ等をバッチ処理的に行なってくれる(もしくはコ マンドラインを出力してくれる)ツールで、自分的にイケてるなと感じたのでブログに 書いておきます。 クラウドフェデレーション的サービスというかフロントエンドサービスというか、複数 のクラウドを扱えるサービスは増えてきているけど、chef を扱えるエンジニアであれ ば、この Spiceweasel で簡単・一括デプロイ出来るので良いのではないかと。 早速だけど chef-repo にこんな yamp ファイルを用意します。 cookbooks: - apt: - nginx: roles: - base: nodes: - 172.24.17.3: run_list: role[base] options: -i ~/.ssh/testkey01 -x root -N webset01 - 172.24.17.4: run_list: role[base] options: -i ~/.ssh/testkey01 -x root -N webset02 上から説明すると… ‘apt’, ’nginx’ の cookbook を opscode レポジトリからダウンロード ‘apt’, ’nginx’ の cookbook を chef-server へアップロード roles/base.rb を chef-server へアップロード 2つのノードに対して bootstrap 仕掛ける ってことをやるためのファイルです。予め chef-repo と roles は用意してあげる必要 があります。この辺りは knife の操作のための準備と全く同じ。また Spiceweasel は、 この yaml フィアル内の各パラメータや指定した role の内容の依存関係をチェックし てくれます。 ...

Emacs でファイルブラウザ emacs-nav を利用

Hacker News で取り上げられていた emacs-nav を使ってみた。 http://code.google.com/p/emacs-nav/ インストール方法は簡単で % wget http://emacs-nav.googlecode.com/files/emacs-nav-20110220a.tar.gz % tar zxvf emacs-nav-20110220a.tar.gz % mv emacs-nav-20110220a ~/.emacs.d/emacs-nav して ;; emacs-nav (add-to-list 'load-path "~/.emacs.d/emacs-nav/") (require 'nav) するだけ。 見た目はこんな感じ。 起動は M-x nav と入力。ウィンドウの左にファイルブラウザが開いてファイルを選択 出来る。これだけだと、使うメリットを感じないが、面白いのがマウスで選択出来ると ころ。TextMate のブラウザのような感じだ。 今だと anything.el が便利すぎて、こちらを利用する価値を見出せるか分からないけ ど、暫く使ってみようと思う。

Mosh を使う

今週/先週?、Hacker News で取り上げられた Mosh を自宅 と会社で使い始めた。SSH 代替なソフトウェアで、SSP (State Synchronization Protocol)over UDP で動作している。MIT が開発したそうだ。 動作は、クライアントがシーケンス番号と共にデータグラムをサーバに送信し、同期し 続ける。クライアントがローミングし IP アドレスが代わる等した時、以前より大きい シーケンス番号と共に正当なパケットが送信されたとサーバが認識した場合のみ、サー バは新しいソース IP アドレスを新たなクライアントだと認識する。もちろん、この場 合のローミングは NAT 越しの IP 再アサイン時やクライアントのネットワークインター フェース切り替えやノート PC を新たな無線アクセスポイント配下へ移動した場合も同 様に動作する。めちゃ便利やん。Mosh は SSP を2経路持ち、1つはクライアントからサー バへユーザの打ったキーの同期を取る。もう一方はサーバからクライアントへで、スク リーンの状態をクライアントへ同期を取るためだ。 つまり、ノート PC やその他モバイル機器の IP アドレスが変わったとしても接続性は 担保され、また ノート PC のスリープ解除後にも接続性は確保され続ける。また、UDP で動作しているので、フルスクリーンの vim や emacs 等での再描画の遅延等も起こり にくそうだ。あと Ctrl-C 。TCP だと、キータイプがサーバプログラムに伝わらない状 況はプログラムプロセスが混雑しているとよくあるのだが、SSP over UDP での Ctrl-C はそういうことが無いそうだ。 また、認証機構は SSH に任せているので sshd は引き続き稼働させておく必要がある。 mosh は接続する先のユーザが一般ユーザ権限で動作させるプログラムでしかない。つ まり mosh daemon は必要ないようだ。 実際にインストールしてみた。Mac の場合、homebrew で ...

switching screen->tmux

長年 Gnu screen 愛用者だったのだけど完全に tmux に移行しました。 愛用している iterm2 との相性も良く、好都合な点が幾つかあり移行する価値がありました。 ただ、サーバサイドでの利用は諦めました。問題だったコピペ問題をクリアしている tmux のバージョンが Debian sid から取得出来たのだけど、まだまだ完成度高くなく..。 よって、Mac に tmux をインストールして作業するようになりました。インストール方法はこれ。 予め https://github.com/mxcl/homebrew/wiki/installation に したがって homebrew をインストールする必要あり。 % brew update % brew install tmux インストールしたら .tmux.conf の作成に入る。prefix キーは C-t にしたかった。screen 時代から これを使っていて指がそう動くから。 # prefix key set-option -g prefix C-t またステータスライン周りの設定。色なども自分で選択すると良い。 # view set -g status-interval 5 set -g status-left-length 16 set -g status-right-length 50 # status set -g status-fg white set -g status-bg black set -g status-left-length 30 set -g status-left '#[fg=white,bg=black]#H#[fg=white]:#[fg=white][#S#[fg=white]][#[default]' set -g status-right '#[fg=white,bg=red,bold] [%Y-%m-%d(%a) %H:%M]#[default]' # window-status-current setw -g window-status-current-fg white setw -g window-status-current-bg red setw -g window-status-current-attr bold#,underscore # pane-active-border set -g pane-active-border-fg black set -g pane-active-border-bg blue UTF-8 有効化やキーバインド設定等は… ...