いろいろ作っていると、TypeScriptに限らず別のプロジェクトで作ったコード使い回せそうだなとかある。(最初から使い回せるように作る場合も)C言語だとライブラリ作るんだけどNode.js、TypeScriptだとどうするんだろう?ってなったわけだ。で、調べてみた。
npmの2.0からローカルにあるパッケージ(モジュールというべき?)をインストールできるようになったらしいんそれを使う。

例として、複数プロジェクトで使うモジュールをcommonという名前で作る。

commonディレクトリを作って、そこでnpm initを実行して、package.jsonを適当に作る。
このモジュールは公開しないので念のためprivateフィールドをtrueで追加する。TypeScriptの場合、typesフィールドを追加して、モジュールの型情報ファイルをしてする。

{
  "name": "common",
  "version": "1.0.8",
  "description": "",
  "main": "test1.js",
  "types":"test1.d.ts",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "private": true
}

つぎにTypeScriptの準備。
tsc --initを実行して、tsconfig.jsonを作成する。まー、特に変更するところはない。
外部モジュールのコード(test1.ts)はこんな感じにして、tscを実行する。

export function print() {
    console.log("Test1モジュール");
}

tsc -Dを実行して型情報ファイルを生成する。(test1.d.tsができる)

次にこのモジュールを使う方だ。

commonディレクトリと同列(隣)にtestと言うディレクトリを作って、そこを使うことにする。 npm initやtsc --initでpackage.json、tsconfig.jsonを作成する。

$ npm install ../common --save

を実行して、commonモジュールをインストールする。testプロジェクトのnode_modulesフォルダにコピーされる。

commonモジュールを使うコードはこんな感じになる。

import * as hoge from "common";

hoge.print();

これで気になるのが、package.jsonのdependenciesフィールドにcommonが絶対ディレクトリで指定されるんだよな。他のPCに持って行ったときにちょっと困りそうだが、直接このフィールドを編集して相対パスで指定しても良さそうだ。

  "dependencies": {
    "common": "file:../common"
  }

追記 2017/9/10
なんか、npm installで型定義ファイルがコピーされなくなってる。

追記 2017/9/10 その2
どうも、.gitignoreに*.d.tsを指定していたせいみたいだ。
型定義ファイルはtscで生成するからと思い.gitignoreに*.d.tsを指定していた。