はじめに
前回
では Node を使った TypeScript の始め方について見てきました。
今回は、Deno を使って TypeScript の始め方について見ていきます。
Deno とは
Node の作者である Ryan Dahl が、Node の反省点を踏まえて新たに作成したランタイムであり、Deno のマニュアルによると以下のように要約されています。
Deno is a JavaScript/TypeScript runtime with secure defaults and a great developer experience. It's built on V8, Rust, and Tokio.
セキュアな JavaScript と TypeScript のランタイムで、V8 と Rust、及びRust の非同期ランタイムである Tokio を基盤としています。
特徴としては以下とされています。
- デフォルトで安全であり、明示的に有効化しない限り、ファイル、ネットワーク、環境へのアクセスはできない
- TypeScript をサポートしている
- 単一の実行ファイル(deno)として提供される
- 依存関係インスペクタ(deno info)やフォーマッタ(deno fmt)などのユーティリティを組み込みで提供する
- Denoでの動作が保証された標準モジュールのセットが提供される
- スクリプトを単一 JavaScript ファイルにまとめることができる
Deno のインストール
Shell でのインストールは以下となります。
$ curl -fsSL https://deno.land/x/install/install.sh | sh
Homebrew の場合は以下でインストールします。
$ brew install deno
現時点でのバージョンは以下のようになっています。
$ deno -V deno 1.1.1
Hello TypeScript With Deno
前回の Node を使ったケースでは、npm による TypeScript コンパイラの導入などを行いましたが、Deno はデフォルトで TypeScript をサポートするため簡単に始めることができます。
$ mkdir deno-hello $ cd deno-hello $ touch index.ts
index.ts
を以下のように編集します。
let greet = (name: string) => 'Hello ' + name; console.log(greet('TypeScript'));
実行してみましょう。実行は deno run
を使います。
$ deno run index.ts Compile file:///Users/xxx/deno-hello/index.ts Hello TypeScript
Http server
もう少しサンプルを見てみます。以下のファイルを作成します。
$ touch server.ts
server.ts
を以下のように編集します。
import { serve } from "https://deno.land/std/http/server.ts"; const server = serve({ port: 8080 }); console.log("http://localhost:8080/"); for await (const req of server) { req.respond({ body: "<h1>Hello World</h1>\n" }); }
Deno では npm を使用せず、ES Module 形式のモジュールシステムを使用します。
import
に URL を記載できるため、上記のように標準の http モジュールをインポートできます。
Deno の標準ライブラリは以下で照会できます。
https://deno.land/stddeno.land
実行は以下のように行います。
$ deno run --allow-net server.ts
--allow-net
を付けることでセキュリティルールを変更する必要があります。このオプションを付けなければ、デフォルトではネットワークを許可していないため実行できません。
その他、ファイルシステムの読み書きを許可する -allow-read
や --allow-write
といったオプションがあります(--allow-all
ですべてを許可することもできます)。
TypeScript Compiler Options
Deno の TypeScript コンパイラオプションはデフォルトで以下の定義になっています。
{ "compilerOptions": { "allowJs": false, "allowUmdGlobalAccess": false, "allowUnreachableCode": false, "allowUnusedLabels": false, "alwaysStrict": true, "assumeChangesOnlyAffectDirectDependencies": false, "checkJs": false, "disableSizeLimit": false, "generateCpuProfile": "profile.cpuprofile", "jsx": "react", "jsxFactory": "React.createElement", "lib": [], "noFallthroughCasesInSwitch": false, "noImplicitAny": true, "noImplicitReturns": true, "noImplicitThis": true, "noImplicitUseStrict": false, "noStrictGenericChecks": false, "noUnusedLocals": false, "noUnusedParameters": false, "preserveConstEnums": false, "removeComments": false, "resolveJsonModule": true, "strict": true, "strictBindCallApply": true, "strictFunctionTypes": true, "strictNullChecks": true, "strictPropertyInitialization": true, "suppressExcessPropertyErrors": false, "suppressImplicitAnyIndexErrors": false, "useDefineForClassFields": false } }
カスタムした tsconfig.json
を適用するには -c
オプションが利用できます。
deno run -c tsconfig.json xyz.ts
VSCode での利用時は以下を参照してください。
プログラミングTypeScript ―スケールするJavaScriptアプリケーション開発
- 作者:Boris Cherny
- 発売日: 2020/03/16
- メディア: 単行本(ソフトカバー)
Effective Typescript: 62 Specific Ways to Improve Your Typescript
- 作者:Vanderkam, Dan
- 発売日: 2019/11/05
- メディア: ペーパーバック