まだタイトルはありません。

まだタイトルはないのです。

typescript入門 with nem library

2017/09/22
自分が記事を読む立場から、この記事はいつ書かれたのだ!?というのが気になることが多々あったので冒頭と末尾に書き加えるようにします。

nem libraryがtypescriptで作られている、かつtypescriptをおすすめしているようなので、javascriptもまともに書けませんがなにかやってみようということです。

環境

ubuntu 16.04 LTS
npm v5.4.2
atom v1.20.0
typescript v2.5.2

参考

Can't find tsconfig.json command in Atom's toggle panel
TypeScriptってどんなもの? プロ生ちゃんと始めてみよう!
nem-library
NEM Libraryを使ってみる(1)

準備

Install atom-typescript

atomatom-typescript をインストールした。
ミスなどいろいろ教えてくれるし、保存したら自動でコンパイルさせることもできる。(はずだができていない...)
このパッケージ自体が他に必要なものがあるようで、いろいろと入れていいかと聞いてくるのでいれた。

ディレクト

プロジェクトディレクトを作成。

npmで管理する。
$ npm init

いろいろ聞かれてpackage.jsonが作られた。テストようなのであまり調べず全部yes。
ただし、ここでnameをtypescriptと指定したら後でtypescriptをインストールしするときに"Refusing to install as a dependency of itself"と言われた。
同じ名前はダメらしい。
参考:【エラー】Refusing to install as a dependency of itself

tsconfig.jsonを作成。
$  tsc –init

tsconfig.jsontsc(typescript compiler)の設定ファイル。 tsconfig.jsonを編集。自分の場合はもっと長かったが、最後に二行書き加えた。意味はsaveすると自動でjavascriptコンパイルしてくれる。
はずだったが"Unknown compiler option "strict""と言われ続けるのであきらめた。プラグインのエラーか私がなにか間違えているか...そもそもstrictを指定しなくてもエラーがでてしまう。

{
"compilerOptions": {
"module": "commonjs",
"target": "es5",
"noImplicitAny": false,
"sourceMap": false
},
"compileOnSave": true,  # この二行を
"buildOnSave": true     # 書き加えた。
}

なのでコンパイルtscで行った。

$ tsc fileName.ts    #コンパイル

Install nem-library and typescript

typescriptとnem-libraryをプロジェクトフォルダにインストール

$ npm i -D typescript nem-library

nem-libraryを使ってコンパイル => 実行までしてみた。

サンプルとしてblock chainの高さを参照しました。

main.ts
import {ChainHttp, NEMLibrary, NetworkTypes, Address} from "nem-library";
NEMLibrary.bootstrap(NetworkTypes.TEST_NET); //MAIN_NETも指定可
 
const chainHttp = new ChainHttp();
chainHttp.getBlockchainLastBlock().subscribe(block => {
console.log(block.height);
});

保存時の自動コンパイルができないため手動でコンパイル

$ tsc main.ts

実行

$ node main.js

以下のjsonが返されるので、block.heightとしてlogにはheightだけを表示させた。

Block {
height: 1125052,
type: 1,
timeStamp: 78220063,
prevBlockHash: { data: 'fce75e7787bff3549045bd5f506f0871c41815791eb6c03c0c8af6b2a7dc0ba0' },
signature: 'f051cc25acccb6442687aa34e2df9ab80de759462d0800867feea75651f5572e1099e8478cdea371a0dec42bcee8d0d82ce049ac67f69bd8983533896c5af606',
signer:
PublicAccount {
address:
Address {
value: 'TALIC367CZIV55GIQT35HDZAZ53CN3VPB3G55BMU',
networkType: 152 },
publicKey: '595613ba7254a20f1c4c7d215103509f9f9c809de03897cff2b3527b181274e2' },
transactions: [],
version: -1744830463 }  

2017/09/22