5
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

NativeScript+TypeScriptでネイティブAPIを呼び出す

Last updated at Posted at 2016-07-31

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はクラス内とかではなくトップレベルにて定義してください。

5
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?