TypeScriptはコードの正当性を厳密にチェックするが故、ネイティブなAPIをコールしようとして
var dictionary = new NSDictionary();
なんてやると、見事にNSDictionaryなんてクラスは存じ上げませぬ、と文句を言われる。
なので、ネイティブAPIを定義したモジュールが公式で用意されていて、プロジェクトフォルダのトップで
npm install tns-platform-declarations --save-dev
なんて打ってやれば、とりあえずはたいていのクラスが定義されたモジュールがロードされるので、reference.d.tsに
/// <reference path="./node_modules/tns-platform-declarations/ios.d.ts" />
/// <reference path="./node_modules/tns-platform-declarations/android17.d.ts" />
/// <reference path="./node_modules/tns-platform-declarations/org.nativescript.widgets.d.ts" />
を追記してやれば、とりあえずエラーはなくなる。
が。
ネイティブAPIはNativeScriptが実行時にリフレクションで呼び出してくれるのであって、暗黙的な変換、例えばNSArrayな引数にJavaScriptの配列を与える、などを利用しようとすると、これまた引数の型がNSArrayじゃねーぞと怒られる。
これではもんげー困るので、ネイティブAPIなんてコード補完いらないぜ! って人は、
declare var NSDictionary: any;
//<中略>
var dictionary = new NSDictionary();
ってやっちまった方が早いです。
なお、当然ながらdeclareはクラス内とかではなくトップレベルにて定義してください。