Boris Cherny : プログラミング TypeScript

作成日: 2020-03-05
最終更新日:

概要

副題は「スケールする JavaScript アプリケーション開発」。

感想

セットアップに苦労する

p.11 の通りセットアップを行ったのだが、苦労した。

$ mkdir chapter04
$ cd chapter04
$ npm init -y
Wrote to /mnt/c/Users/username/documents/program/typescript/chapter04/package.json:

{
  "name": "chapter04",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}


$ npm install --save-dev typescript tslint @types/node
npm WARN deprecated tslint@6.1.3: TSLint has been deprecated in favor of ESLint. →
    Please see https://github.com/palantir/tslint/issues/4534 for more information.
npm WARN chapter04@1.0.0 No description
npm WARN chapter04@1.0.0 No repository field.

npm ERR! code ENOENT
npm ERR! syscall rename
npm ERR! path /mnt/c/Users/usernamr/documents/program/typescript/chapter04/node_modules/typescript
npm ERR! dest /mnt/c/Users/usernamr/documents/program/typescript/chapter04/node_modules/.typescript.DELETE
npm ERR! errno -2
npm ERR! enoent ENOENT: no such file or directory, rename →
  '/mnt/c/Users/usernamr/documents/program/typescript/chapter04/node_modules/typescript'  →
  -> '/mnt/c/Users/usernamr/documents/program/typescript/chapter04/node_modules/.typescript.DELETE'
npm ERR! enoent This is related to npm not being able to find a file.
npm ERR! enoent

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/usernamr/.npm/_logs/2021-03-05T01_37_31_375Z-debug.log
$

うまくいっていないようだ。付録 H のようにやってみよう。

$ mkdir chapter04
$ cd chapter04
$ npm init -y
(省略)
$ npm i -D typescript
npm WARN chapter04@1.0.0 No description
npm WARN chapter04@1.0.0 No repository field.

npm ERR! code ENOENT
npm ERR! syscall rename
npm ERR! path /mnt/c/Users/username/documents/program/typescript/chapter04/node_modules/typescript
npm ERR! dest /mnt/c/Users/username/documents/program/typescript/chapter04/node_modules/.typescript.DELETE
npm ERR! errno -2
npm ERR! enoent ENOENT: no such file or directory, →
  rename '/mnt/c/Users/username/documents/program/typescript/chapter04/node_modules/typescript' →
   -> '/mnt/c/Users/username/documents/program/typescript/chapter04/node_modules/.typescript.DELETE'
npm ERR! enoent This is related to npm not being able to find a file.
npm ERR! enoent

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/username/.npm/_logs/2021-03-05T01_45_30_136Z-debug.log

やはりうまくいかない。これはファイルの権限がないことで起きているエラーのようだ。sudo をつけて実行をやり直そう。

$ sudo npm i -D typescript

added 1 package, and audited 2 packages in 14s

found 0 vulnerabilities
$ npx tsc --init
message TS6071: Successfully created a tsconfig.json file.
$ sudo npm i -D eslint@typescript-eslint/eslint-plugin @typescript-eslint/parser
(後略)

うまくいったようだ。ただ、npm の前に sudo をしなければいけないのは仕方がないのだろうか。

5 章 クラスとインターフェース

p.88 の例を VS Code を使って打ってみた。なんか嫌な予感がして、それは現実になった。

	type File = 'A' |'B' |'C' |'D' |'E' |'F' |'G' | 'H'
	type Rank = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8

この File の下に赤い波線が現れ、次の問題が表示された。

識別子 'File' が重複しています。 ts(2300)
lib.dom.d.ts(5531, 11): ここでは 'File' も宣言されました。
lib.dom.d.ts(5536, 13): およびここで。

この File というのはチェスでいう A ~ H 軸(X軸)のことをいう。日本の将棋でいえば「筋」にあたる。 なお、Rank はチェスでいう 1 から 8 (Y軸)のことをいい、将棋では「段」に相当する。 こちらの表示はない。

けっきょくどうしたかというと、こちらの type File と type Rank の名前をそれぞれ type CFile と type CRank に変えた(C は Chess の意味)。正当な方法はモジュールを使うものだろうが、 よくわからない。

同じようなことが、p.92 から、Set の自前版を作るときにもおこった。こういうときは、 MySet などとするのだろうか。ただ、私の場合はせっかくなのでエスペラントで Aro という名前にしてみた。

全体として

紹介されているのがコードの断片なので、コード全体を通して適用すべき例が見当たらず、 わたしのような初学者には理解が難しかった。すでに大規模な JavaScript のコードを書いている人であれば、 役に立つのだろう。

誤植

誤植は見つからなかった。しかし、気になることがある。 副題の「スケールする JavaScript アプリケーション開発」にある「スケールする」 とはどういう意味であろうか。本書の原題は、 "Programming Typescript --- Making Your JavaScript Applicaions Scale" である。 意訳して、「大規模開発可能な JavaScript アプリケーション」ぐらいでどうだろうか。

書誌情報

書名プログラミング TypeScript
著者Boris Cherny
監訳者今村 謙士
訳者原 隆文
発行日 年 月 日
発行元オライリー・ジャパン
定価3400 円
サイズA4 変形判
ISBN978-4-87311-904-5
その他越谷市立図書館で借りて読む

まりんきょ学問所コンピュータについてコンピュータの本JavaScript, altJS > Boris Cherny:プログラミング TypeScript


MARUYAMA Satosi