2013年7月31日水曜日

TypeScript; interfaceとアクセサー(get/set)とプロパティ

TypeScript-0.9現在のinterface周りの話。

interface i
{ get hoge(): boolean; }

とかするとinterfaceにアクセサーはダメと怒られる。

そこで、

interface i
{ get_hoge(): boolean; }

として

class c implements i
{ get_hoge() { return false; } }

とかしてた。とりあえずにしてもダサい

それからしばらくして、ふと、

interface i
{ hoge: boolean; }

とか書いてみた。問題無い様だ。

class c implements i
{ get hoge() { return false; } }

とか使える。

これについて若干腑に落ちない気もしたが、考えてみる。

そもそもTypeScriptの基となるECMAScriptにおいて関数は第一級オブジェクトで、プロトタイプにコンパイルされるTypeScriptのクラス及びそのメンバーのメソッドも関数オブジェクトのプロトタイプに名前を付けて束縛された関数オブジェクトに過ぎない。

それ故、TypeScriptのclassのメンバーにおけるプロパティとメソッドもECMAScriptにコンパイルされる本質としては実はTypeScriptレベルのOOPにおけるメソッドもプロパティも同じ事になる。

そんな訳で、TypeScriptのinterfaceにプロパティの宣言を書いてもメソッドの宣言を書いても事実上オブジェクトの扱いとしてそれらは等価なので、上記した一般的に単にOOP的思考では若干腑に落ちない様な気がしてしまうプロパティ宣言のinterfaceへの定義も言語仕様として自然なのでしょう。たぶん。

※TypeScriptの言語仕様は正式なリリースへ向け大きく変わる可能性はまだあります。

0 件のコメント:

コメントを投稿