Last Modified:

#NativeScript のプラグインを #TypeScript で書くときのベストプラクティス

$ git clone https://github.com/NativeScript/nativescript-plugin-seed ./nativescript-myplugin
$ cd ./nativescript-myplugin/src
$ npm run postclone

という感じでひな形を作ると、 package.jsonが

"main": "myplugin",
"typings": "index.d.ts",

となっていて、実装をmyplugin.${platform}.tsから、型定義をindex.d.tsから読み込むようになってる。 これ、普通に書いてると

のどちらかに陥ってしまう(実際にやってみると分かるんだけど、言葉でうまく説明できない)。 例えば

解決

それで思いついたのが、index.d.tsではクラスとして定義しつつ、myplugin.${platform}.tsでそれをインターフェイスとして使うと言う方法。

export declare class MyPlugin {
    myplugin();
}
import { MyPlugin as MyPluginInterface } from './index';

export class MyPlugin implements MyPluginInterface {
    myplugin() {
    }
}

こうすることでビルドが通り、型チェックもでき、未実装の場合にエラーにできる。 ポイントは、

です。